我正在开发一个包含两个DataGridViews
的小应用程序。
第二个DataGridView
通过自定义类对象列表上的绑定填充(用户按下按钮,列表添加新元素并重新绑定到DataGridView
)。
我遇到的问题是,当我在DataGridView
中有一些行时(即使它实际上只有一行......),如果我碰巧点击其中一行选择它们的行,Visual Studio弹出显示调试器,因为System.IndexOutOfRangeException
发生了。
似乎当用户点击一行时,DataGridView
会抛出此异常,因为它说我试图访问数组的-1索引。
奇怪的是,即使我没有任何事件听取行选择,也会抛出此异常!
实际上,DataGridView
没有发生任何事件。
调试器没有帮助,因为它在Form构造函数级别抛出异常(它在Application.Run(new frmMain());
处断开,所以它没有告诉我任何有用的东西)
有人可以帮帮我吗?
如果您需要任何代码,请告诉我,我会尽我所能为您提供。
谢谢!
答案 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
本身。
这似乎解决了我的问题,但如果我遇到其他奇怪的行为,我会编辑答案。
再次感谢,祝你有愉快的一天! :)