WinForms DataGridView抛出IndexOutOfRangeException

时间:2017-04-14 13:25:51

标签: c# .net winforms datagridview indexoutofrangeexception

这是Stack Overflow上的第一个计时器(尽管我已经潜伏了很多年。)

我正在开发一个包含两个DataGridViews的小应用程序。 第二个DataGridView通过自定义类对象列表上的绑定填充(用户按下按钮,列表添加新元素并重新绑定到DataGridView)。

我遇到的问题是,当我在DataGridView中有一些行时(即使它实际上只有一行......),如果我碰巧点击其中一行选择它们的行,Visual Studio弹出显示调试器,因为System.IndexOutOfRangeException发生了。

似乎当用户点击一行时,DataGridView会抛出此异常,因为它说我试图访问数组的-1索引。

奇怪的是,即使我没有任何事件听取行选择,也会抛出此异常

实际上,DataGridView没有发生任何事件。

调试器没有帮助,因为它在Form构造函数级别抛出异常(它在Application.Run(new frmMain());处断开,所以它没有告诉我任何有用的东西)

有人可以帮帮我吗?

如果您需要任何代码,请告诉我,我会尽我所能为您提供。

谢谢!

1 个答案:

答案 0 :(得分:2)

首先,感谢您的反馈。

非常感谢用户 @Trey 让我认为我必须仔细检查我的绑定。

我将我的DataGridViews直接绑定到我的Lists<CustomType>,而没有使用BindingList

之前的代码:

初始化:

List<CustomType> myList = new List<CustomType>();
// populating the list with some code, skipping because not relevant
myDataGridViewExample.DataSource = myList;

数据插入:

myList.Add(something);
myDataGridViewExample.DataSource = null;
myDataGridViewExample.DataSource = myList;

以这种方式,我直接重新绑定列表每次我更新了列表

我的代码现在:

初始化:

List<CustomType> myList = new List<CustomType>();
// populating the list with some code, skipping because not relevant
BindingList<CustomType> myBind = new BindingList<CustomType>(myList);
myDataGridViewExample.DataSource = myBind;

数据插入:

myList.Add(something);
myBind.ResetBindings();

通过这种方式,我只刷新了BindingList而没有直接触及List本身。

这似乎解决了我的问题,但如果我遇到其他奇怪的行为,我会编辑答案。

再次感谢,祝你有愉快的一天! :)