Как я могу получить значение DataGridViewCell из события Cell_Leave? - PullRequest
6 голосов
/ 09 мая 2011
private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex > 1)
    {
        int cellValue = Convert.ToInt32(((DataGridViewCell)sender).Value);

        if (cellValue < 20)
        {
            ((DataGridViewCell)sender).Value = 21;
        }   
    }
}

Я пытаюсь получить значение ячейки, из которой произошло событие.

Возникает исключение при попытке привести sender к DataGridViewCell:

Невозможно привести объект типа 'System.Windows.Forms.DataGridView' для тип 'System.Windows.Forms.DataGridViewCell'.

Что вы посоветуете мне сделать?

Мне нужно проверить, если значение меньше 20, и если оно есть, увеличить его до 21.

Ответы [ 6 ]

4 голосов
/ 09 января 2012
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.Rows[e.RowIndex].Cells[1].Value != null)
            {
                int cellmarks = Convert.ToInt16(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
                if (cellmarks < 32)
                {
                    dataGridView1.Rows[e.RowIndex].Cells[2].Value = "Fail";
                }
                else
                {
                    dataGridView1.Rows[e.RowIndex].Cells[2].Value = "Pass";
                }

            }
        }

Этот код получит значение currentcell. Может вам помочь.

4 голосов
/ 09 мая 2011

Попробуйте поработать с theDataGrid[e.RowIndex, e.ColumnIndex].Value. Я ожидаю, что отправителем, скорее всего, будет объект DataGridView, а не сама ячейка.

2 голосов
/ 09 мая 2011

тип отправителя - DataGridView, поэтому вы можете использовать следующую строку:

int cellValue = Convert.ToInt32(((DataGridView)sender).SelectedCells[0].Value);
2 голосов
/ 09 мая 2011

Вы можете получить значение ячейки как

dataGridView1[e.ColumnIndex, e.RowIndex].FormattedValue;
0 голосов
/ 08 мая 2018

Я предлагаю получить значение ячейки с помощью свойства EditedFormattedValue, поскольку при моем тестировании введенное мной значение FormattedValue всегда равно нулю.

0 голосов
/ 24 августа 2015

Я сделал небольшой вариант для события _CellClick.

private void Standard_CellClick(object sender, DataGridViewCellEventArgs e)
  {
     if (e.RowIndex >= 0)
     {
        int intHeaderId = 0;
        switch (((DataGridView)sender).Columns[e.ColumnIndex].Name)
        {
           case "grcHeaderId":
              intHeaderId = (int)grvEnteredRecords[grcHeaderId.Index, e.RowIndex].Value;
              break;
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...