2015-04-06 2 views
0

В настоящее время я работаю над проектом, который использует блок DataGridView для отображения результатов поиска данных, извлекаемых из удаленной базы данных MySQL.Ошибка раскраски ячеек DataGridView

Я пытаюсь повторно цвета фона каждой строки на основе значения строки одного из столбцов

Код:

foreach (DataGridViewRow row in this.dgvSearchResults.Rows) 
      { 
       if (row.Cells[4].Value.ToString() == "Outbound") 
       { 
        row.DefaultCellStyle.BackColor = Color.LightSkyBlue; 
       } 
       else if (row.Cells[4].Value.ToString() == "Inbound") 
       { 
        row.DefaultCellStyle.BackColor = Color.LightCyan; 
       } 
       else 
       { 
        row.DefaultCellStyle.BackColor = Color.White; 
       }; 
      } 

Моя ошибка:

Object reference not set to an instance of an object

enter image description here

Я не могу показаться, что это все, любая обратная связь поможет!

+0

какое событие вы делаете это в ..? это событие OnDataBound ..? можете ли вы опубликовать полный метод, в котором находится этот код ..? какая строка бросает ошибку ссылки на объект. Вы прошли через код с помощью отладчика или просто нажали «F5» и пошли ..? – MethodMan

+2

'row.Cells [4] .Value' является' null' ... поместите точку останова и попытайтесь выяснить, почему. Если это нормально, это «null», а затем используйте это, чтобы избежать исключения: 'Convert.ToString (row.Cells [4] .Value) ==" whatever "' –

+0

находится в событии DataBindingComplete, а на скриншоте показана строка что он бросает. – Meta

ответ

2

Убедитесь, что есть на самом деле, по крайней мере 5 клеток (C# массивы 0 оценка) и убедитесь, что Value где вы звоните .ToString() на не null. Для последнего вы можете сделать следующее:

if (row.Cells[4].Value != null) 
{ 
    if (row.Cells[4].Value.ToString() == "Outbound") 
    { 
     row.DefaultCellStyle.BackColor = Color.LightSkyBlue; 
    } 
    else if (row.Cells[4].Value.ToString() == "Inbound") 
    { 
     row.DefaultCellStyle.BackColor = Color.LightCyan; 
    } 
    else 
    { 
     row.DefaultCellStyle.BackColor = Color.White; 
    } 
} 
else 
{ 
    row.DefaultCellStyle.BackColor = Color.White; 
} 
+0

Это решило проблему, я не уверен, что ячейка имеет/была равна null, поскольку в любом из этих полей нет нулевых значений в базе данных. (похоже, что последняя строка в DataGridView полностью пуста по всей доске) http://puu.sh/h3EfB/f0d77c8a22.png – Meta

+0

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

Смежные вопросы