我有以下两个代码:
方法:
public void GetGridColor()
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1.Rows[i].Cells[0].Value.ToString() != "")
{
if (dataGridView1.Rows[i].Cells[10].Value.ToString() == "Normal")
{
dataGridView1.Rows[i].Cells[10].Style.BackColor = Color.FromArgb(157, 196, 230);
}
if (dataGridView1.Rows[i].Cells[10].Value.ToString() == "Critical")
{
dataGridView1.Rows[i].Cells[10].Style.BackColor = Color.FromArgb(47, 117, 181);
}
if (dataGridView1.Rows[i].Cells[10].Value.ToString() == "High")
{
dataGridView1.Rows[i].Cells[10].Style.BackColor = Color.FromArgb(31, 78, 120);
}
}
}
}
CellFormatting事件:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1.Rows[i].Cells[0].Value.ToString() != "")
{
if (dataGridView1.Rows[i].Cells[10].Value.ToString() == "Normal")
{
dataGridView1.Rows[i].Cells[10].Style.BackColor = Color.FromArgb(157, 196, 230);
}
if (dataGridView1.Rows[i].Cells[10].Value.ToString() == "Critical")
{
dataGridView1.Rows[i].Cells[10].Style.BackColor = Color.FromArgb(47, 117, 181);
}
if (dataGridView1.Rows[i].Cells[10].Value.ToString() == "High")
{
dataGridView1.Rows[i].Cells[10].Style.BackColor = Color.FromArgb(31, 78, 120);
}
}
}
}
基本上应该做同样的事情。但它会抛出System.NullReferenceException。
现在,如果我将其更改为
if (dataGridView1.Rows[i].Cells[0].Value != null)
在CellFormatting事件中,它修复了问题。我对编程有一点了解,我承认缺少但我的问题是没有更改任何FormattedValue或提供从单元格值到显示值的自定义转换,为什么当Cells [0]不包含时抛出空异常错误我的样本数据的空值?当我使用ToString()
在不同的datagridview(让我们称之为datagridview2)上使用不同但几乎精确的样本数据应用相同的代码时,不会显示错误。另请阅读此内容以尝试了解错误显示为DataGridView CellFormating的原因。