2015-04-06 81 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

这已经解决了这个问题,我不确定单元格是如何为空的,因为这些字段中没有任何空值。 (它看起来像DataGridView中的最后一行在整个板上是完全空的)http://puu.sh/h3EfB/f0d77c8a22.png – Meta

+0

没有看整个程序/数据库结构,查询和数据我可以甚至不会猜测为什么会是这样。抱歉... –