2013-07-22 2 views
2

Привет, я написал этот код для поиска карточного в gridview. Но я получаю сообщение об ошибке:NullReferenceException при поиске данных в DataGridView

«Ссылка на объект не установлена ​​в экземпляр объекта».

foreach (DataGridViewRow row in dataGridView2.Rows) 
{ 
    if (row.Cells["CardSerial"].Value.ToString().Equals(textBox2.Text)) 
    { 
     dataGridView2.Rows[row.Index].DefaultCellStyle.BackColor = Color.Yellow; 
    } 
} 

Не могли бы вы сказать мне, в чем проблема?

+0

возможно дубликат (HTTP [Что такое NullReferenceException в .NET?]: // StackOverflow. com/questions/4660142/what-is-a-nullreferenceexception-in-net) –

+0

Отладка и укажите, какая строка дает ошибку. – Ehsan

ответ

1

Сначала проверьте, если значение в ячейке не равно нулю (если он звонит ToString на это не удается)

foreach (DataGridViewRow row in dataGridView2.Rows) 
{ 
    var serial = row.Cells["CardSerial"].Value; 

    if (serial != null && serial.ToString().Equals(textBox2.Text)) 
    { 
     row.DefaultCellStyle.BackColor = Color.Yellow; 
    } 
} 
2

Скорее всего, из следующих имеет нулевое значение, которое вызывает исключение, если вы разыменования ему:

  • dataGridView2
  • row.Cells["CardSerial"]
  • row.Cells["CardSerial"].Value
  • textBox2
  • dataGridView2.Rows[row.Index]
  • dataGridView2.Rows[row.Index].DefaultCellStyle

Чтобы узнать, какой из них, отлаживать вашу программу, и использовать окно просмотра, немедленное окно, или добавить несколько строк вывода отладки/трассировки.

Обратите внимание, что row.Cells["CardSerial"].Value имеет значение NULL.

+0

* «Чтобы узнать, какой из них отлаживает ваша программа» * +1 –

+0

Я думаю, что 'dataGridView2.Rows [row.Index]' не может быть нулевым, если 'row.Index' не находится за пределами допустимого диапазона. В противном случае вместо этого будет выбрано исключение «IndexOutOfRangeException». –

+0

@KingKing Да, я считаю, что это совершенно правильно, тем более, что индекс поступает из самой строки в любом случае (не уверен, почему OP не просто использует 'row.DefaultCellStyle') –