AllowUserToAddRows在DataGridViewCellFormattingEvent中导致Null引用异常

时间:2013-12-21 03:24:42

标签: c# datagridview nullreferenceexception readonly

所以我有一个在DataGridViewCellFormattingEvent上调用的方法来检查我的datagridview的第一列。如果发现某行的第一列中的值设置为H或F,则会以某种方式为该行中的所有单元格着色,但也会将该行设置为ReadOnly,Selected = false和font大胆的。这是我的解决方法,包括额外的页眉和页脚......除了这个问题外,它的效果很好。

如果我将datagridview AllowUserToAddRow属性设置为true(我们最终需要这样做),此方法在尝试获取单元格值时会抛出无效的引用异常。该值返回null,如果该值为null,我尝试了各种方法来传递该方法,但无论我做什么,它都会不断抛出错误。如果有人可以提供一些建议,我将不胜感激。这是我的方法(请注意,我可以让它工作的唯一方法是将AllowUserToAddRows设置为false ...我通常不会在此方法中使用它,但将其包含在内以供参考):

    private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs args)
    {
        var dgv = (DataGridView)sender;
        dgv.AllowUserToAddRows = false;

        if (!dgv.Rows[args.RowIndex].Cells[0].Value.Equals(null))
        {
            string cellValue = dgv.Rows[args.RowIndex].Cells[0].Value.ToString();

            bool regF = Regex.Match(cellValue, "F.*").Success;
            bool regH = Regex.Match(cellValue, "H.*").Success;

            if (regH == true)
                args.CellStyle.BackColor = System.Drawing.Color.LightBlue;

            if (regF == true)
                args.CellStyle.BackColor = System.Drawing.Color.LightGray;

            if (regH == true || regF == true)
            {
                args.CellStyle.Font = new System.Drawing.Font(args.CellStyle.Font, FontStyle.Bold);
                dgv.Rows[args.RowIndex].Cells[args.ColumnIndex].Selected = false;
                dgv.Rows[args.RowIndex].ReadOnly = true;
            }
        }
    }

这是破线:

    if (!dgv.Rows[args.RowIndex].Cells[0].Value.Equals(null))

我尝试使用IsNullOrEmpty,执行直接... == null,所有结果都相同

1 个答案:

答案 0 :(得分:0)

很抱歉,如果我浪费了任何人的时间,但我找到了解决方案。我没有直接将null与我的引用值进行比较,而是首先将值设置为DataGridViewCell对象,然后我能够将其值正确地与null进行比较。以下是我所做的更新:

DataGridViewCell c = dgv.Rows[args.RowIndex].Cells[0]; 
if (c.Value != null)