在datagridview_CellFormatting中使用dataGridView1.Rows [i] .Cells [0] .Value.ToString()!=“”显示value为null并抛出null错误

时间:2017-03-30 08:30:36

标签: c# datagridview cell-formatting

我有以下两个代码:

方法:

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的原因。

0 个答案:

没有答案