C# 在访问DataGridView的单元格时,是什么导致此NullReferenceException?

C# 在访问DataGridView的单元格时,是什么导致此NullReferenceException?,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个DataGridView控件,我正在检查列0的值是否正确 但是当我点击我的按钮回显值时,我总是会得到这个错误 我的代码中有错误吗?还是什么 我认为最可能的原因是,当您单击按钮时,表单聚焦在第二行(带*的行),该行没有引用,直到您单击并在该行的单元格中输入某个内容(如果是,将自动生成另一个带*的行)。如果不希望自动生成行,只需将dataGridView1.AllowUserToAddress设置为false。将长/复合语句拆分为几行/语句: dbView1是否为空 dbView1.C

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

但是当我点击我的按钮回显值时,我总是会得到这个错误


我的代码中有错误吗?还是什么

我认为最可能的原因是,当您单击按钮时,表单聚焦在第二行(带*的行),该行没有引用,直到您单击并在该行的单元格中输入某个内容(如果是,将自动生成另一个带*的行)。如果不希望自动生成行,只需将
dataGridView1.AllowUserToAddress
设置为false。

将长/复合语句拆分为几行/语句:

  • dbView1是否为空
  • dbView1.CurrentRow是否为空
  • dbView1.CurrentRow.Index等于-1还是大于行数
  • dbView1[dbView1.CurrentRow.Index]是否为空
尝试更换

dgView.CurrentRow.Index
dgView.SelectedRows[0]。Index

并将属性
Multiselect
设置为
False
SelectionMode
=
FullRowSelect


这有用吗?:)

我刚刚创建了一个新的项目a,我觉得它很有效。。。奇怪。

当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;
        }     
    }
}
试试看
{
MessageBox.Show(dgView1[0,dgView1.CurrentRow.Index].Value.ToString());
}
抓住
{
对于(int i=0;i
我刚刚检查了它,但它似乎得到了gridview@yonan这里我完美地再现了你的错误。将gridview设为两行,一行带有值,另一行标记为*。如果选择第1行,则不会发生错误。如果您选择行*,它将抛出异常,就像您的问题中发生的一样。啊。。。谢谢但它现在已经开始工作了。你玩DOTA对吗。。?呵呵。另外,当抛出该异常并暂停调试时,请检查每个值以查看哪个值为NULL,然后将其发布到此处:)我尝试跟踪当前选定行和列的值。这似乎是正确的。但我仍然无法获得我在该特定单元格中提供的值。您能检查哪个对象为NULL并让我们知道吗?如果行和列都很好,我认为唯一剩下的NULL值就是
value
。是否为NULL?此代码为dataGridView1[dataGridView1.CurrentCell.ColumnIndex,dataGridView1.CurrentRow.Index]。值返回NULL