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