Что вызывает это исключение NullReferenceException при доступе к ячейке DataGridView? - PullRequest
0 голосов
/ 11 сентября 2010

У меня есть DataGridView элемент управления, и я проверяю, правильно ли я получаю column 0

alt text

Но когда я нажимаю кнопку, чтобы отобразить значение, я всегда получаю эту ошибку ...

alt text

Есть ли ошибки в моем коде? Или что?

Ответы [ 5 ]

1 голос
/ 27 августа 2013

Когда представление данных изначально связывается с данными, и вы не щелкаете ни по одной строке, ни по какой-либо ячейке, ни по представлению данных, свойство CurrentRow.Index не будет устанавливать «видимую» выбранную строку.Но когда вы пройдете по каждой строке, вы обнаружите, что dgView.Rows [?]. Выбранный имеет значение true или false.Вы можете создать метод с помощью try catch, чтобы перехватить исключение при получении свойства CurrentRow.Index.Попробуйте следующий код.

try
{
    MessageBox.Show(dgView1[0,dgView1.CurrentRow.Index].Value.ToString());
}
catch
{
    for (int i = 0; i < dgView1.Rows.Count; i++)
    {
        if (dgView1.Rows[i].Selected) 
        {
           MessageBox.Show(dgView1[0,dgView1.Rows[i].Index].Value.ToString());
           return;
        }     
    }
}
1 голос
/ 11 сентября 2010

Разбейте ваше длинное / сложное утверждение на несколько строк / операторов:

  • Является ли dbView1 нулевым?
  • Является ли dbView1.CurrentRow нулевым?
  • Значение dbView1.CurrentRow.Index равно -1 или больше числа строк?
  • Является ли dbView1 [dbView1.CurrentRow.Index] нулевым?
0 голосов
/ 11 сентября 2010

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

0 голосов
/ 11 сентября 2010

Попробуйте заменить

dgView.CurrentRow.Index на dgView.SelectedRows[0].Index

и установите для свойства Multiselect значение False, SelectionMode = FullRowSelect

Сделаноэто поможет?:)

0 голосов
/ 11 сентября 2010

Я думаю, что наиболее вероятная причина в том, что когда вы нажимаете кнопку, форма фокусируется на 2-й строке (строка с *), эта строка не имеет ссылки на нее, пока вы не нажмете и не введете что-либо в ячейку строки.(если так, другая строка с * будет сгенерирована автоматически).Если вы не хотите, чтобы строка генерировалась автоматически, просто установите для dataGridView1.AllowUserToAddRows значение false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...