.Net DataGridView“索引0没有值。”

时间:2009-10-27 11:30:06

标签: .net winforms datagridview

我遇到了DataGridView的问题。 当我尝试删除其中一个项目并重新加载网格时,我有一个绑定到网格的3个项目的集合。

如果有代码

If (dlg.ShowDialog() = DialogResult.OK) Then
     'Show dialog with grid on it
End If

在打开的对话框中,我从网格中删除了一个项目(应该从集合中删除项目,然后重新加载网格),然后返回“If(dlg.show ... “行,错误

“System.Windows.Forms.dll中发生'System.IndexOutOfRangeException'类型的第一次机会异常

其他信息:索引2没有值。 “

(我已经打开调试器设置为公共语言运行库错误)

如果我试图访问任何单元格,行或列,我可以理解这个错误,但我不会,然后我希望异常停止在尝试访问此网格数据的代码行上,而不是“如果(dlg.ShowDialog()...”行

有什么想法吗? 干杯

4 个答案:

答案 0 :(得分:8)

我发现如果你加入

DataGridView.DataSource = Nothing
DataGridView.Refresh()

将网格重置为集合(删除已删除的项目)

DataGridView.DataSource = MyCollection

它就像一个魅力。 仍然有兴趣为什么你必须这样做。

答案 1 :(得分:0)

由于您正在显示模式对话框,因此可能会显示抛出的错误。您是否尝试在实际从网格/集合中删除的代码行中设置一个断点,以查看错误是否来自该错误?

答案 2 :(得分:0)

这似乎是一个.NET错误,我创建了一个测试程序,但仍然失败,但是通过在数据源绑定之前添加Null检查和项计数得到了一种解决方法:

If MyCollection IsNot Nothing AndAlso MyCollection.Count > 0 Then
    DataGridView.DataSource = MyCollection
End If

答案 3 :(得分:0)

此错误表示在将数据源设置为null之前,数据源已为空或空。

例如:这将跳出您的例外情况

DataGridView.DataSource = Mylist; 
Mylist.clear();
DataGridView.DataSource = null;
updateMyList();
DataGridView.DataSource = MyList;

在我的情况下,如果您的代码中的任何内容(线程/计时器或任何函数)试图在MyList清除/之前从DataGrid获取数据行/列(例如选择所有行..),它将跳出Exception。空的要解决此问题,请与我重新编码:

DataGridView.DataSource = Mylist; 
DataGridView.DataSource = null; // Set null frist, take it seperate with data
Mylist.clear();                 // clear data 
updateMyList();                   // update data...
DataGridView.DataSource = MyList; // update table, free error

祝你好运