访问DataGridView的单元格时导致此NullReferenceException的原因是什么?

时间:2010-09-11 02:10:50

标签: c# winforms datagridview

我有一个DataGridView控件,我正在检查我是否得到column 0的正确值

alt text

但是当我点击我的按钮来回显该值时,我总是会收到此错误...

alt text

我的代码中是否有错误?或者是什么?

5 个答案:

答案 0 :(得分:1)

将你的long /复合语句分成几行/语句:

  • dbView1是否为null?
  • dbView1.CurrentRow是否为null?
  • dbView1.CurrentRow.Index是等于-1还是大于行数?
  • dbView1 [dbView1.CurrentRow.Index]是否为null?

答案 1 :(得分:1)

当datagridview最初与数据绑定,并且您没有单击任何行或任何单元格或datagridview时,CurrentRow.Index属性将不会设置为“可见”选定的行。 但是当你遍历每一行时,你会发现dgView.Rows [?]。Selected已设置为true或false。您可以使用try catch创建一个方法,以便在获取CurrentRow.Index的属性时捕获异常。请尝试以下代码。

try
{
    MessageBox.Show(dgView1[0,dgView1.CurrentRow.Index].Value.ToString());
}
catch
{
    for (int i = 0; i < dgView1.Rows.Count; i++)
    {
        if (dgView1.Rows[i].Selected) 
        {
           MessageBox.Show(dgView1[0,dgView1.Rows[i].Index].Value.ToString());
           return;
        }     
    }
}

答案 2 :(得分:0)

我认为最可能的原因是,当您单击按钮时,表单将集中在第2行(带*的行),此行在您单击&amp;之前没有对它的引用。在行的单元格中输入内容(如果是这样,将自动生成另一行*)。如果您不希望自动生成行,只需将dataGridView1.AllowUserToAddRows设置为false。

答案 3 :(得分:0)

我刚创建了一个新项目,我工作了......很奇怪。

答案 4 :(得分:-1)

尝试替换

带有dgView.CurrentRow.Index

dgView.SelectedRows[0].Index

并将属性Multiselect设置为FalseSelectionMode = FullRowSelect

这有帮助吗? :)