2016-02-16 44 views
-1

我用这段代码改变了条件的行颜色,但代码不起作用!我不知道为什么,我有一个错误:DataGridview的C#彩色行

System.NullReferenceException类型的未处理的异常出现在DB(项目名称)的.exe

当我到达“ color = dataGridView1.Rows ....“

我该怎么办?

while (true) 
{ 
    color = dataGridView1[2, rowindex].Value.ToString(); 
    if (color == "IDLE") 
    { 
     dataGridView1.Rows[rowindex].DefaultCellStyle.BackColor = Color.Orange; 
    } 
    if (color == "ACTIVE") 
    { dataGridView1.Rows[rowindex].DefaultCellStyle.BackColor = Color.Green; } 
    if (color == "MAINTENANCE") 
    { dataGridView1.Rows[rowindex].DefaultCellStyle.BackColor = Color.Purple; } 
    if (color == "DISMISSED") 
    { dataGridView1.Rows[rowindex].DefaultCellStyle.BackColor = Color.Red; } 
    if (color == null) 
    { break; } 
    rowindex++; 
} 
+0

'我应该怎么办'进行调试:通过走行线,发现问题 – ASh

+0

源使用debugger..perhaps你应该使用一个foreach循环或通过适当的for循环回路行数也是什么时候你设置的值为false跳出while循环.. – MethodMan

+0

你应该使用这样的foreach循环,然后检查行中的值,例如 'foreach(DataGridViewRow row dataGridView1。行')假设列的名称是'颜色',如果是的话,我会发布一个重构的答案,供您测试 – MethodMan

回答

0
foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    if (row.Cells["color"] == "IDLE") 
    { 
     row.DefaultCellStyle.BackColor = Color.Orange; 
    } 
    else 
    if (row.Cells["color"] == "ACTIVE") 
    { 
     row.DefaultCellStyle.BackColor = Color.Green; 
    } 
    else 
    if (row.Cells["color"] == "MAINTENANCE") 
    { 
     row.DefaultCellStyle.BackColor = Color.Purple; 
    } 
    else 
    if (row.Cells["color"] == "DISMISSED") 
    { 
     row.DefaultCellStyle.BackColor = Color.Red; 
    } 
    //else 
    //{ 
    // break; //probably don't need this since the foreach will know when it's done looping through all the Rows 
    //} 
} 
+0

我应该把列名放在方括号中吗? – davidemarchiori

+0

是列名需要在我有'[“颜色”]'用其正确的列名替换它 – MethodMan

+0

程序说他找不到列...我应该把东西不同的地方圆括号中的“row”? – davidemarchiori