【问题标题】:WinForms DataGridView throwing IndexOutOfRangeExceptionWinForms DataGridView 抛出 IndexOutOfRangeException
【发布时间】:2017-04-14 13:25:51
【问题描述】:

Stack Overflow 上的第一个计时器(虽然我已经潜伏了很长时间)。

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

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

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

奇怪的事实是这个异常被抛出即使我没有任何事件监听行选择

实际上,DataGridView 上根本没有监听任何事件。

调试器没有帮助,因为它在 Form 构造函数级别引发异常(它在 Application.Run(new frmMain()); 处中断,所以它没有告诉我任何有用的信息)。

有人可以帮帮我吗?

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

谢谢!

【问题讨论】:

  • 它在某个地方调用了一些东西,你的初始化程序/表单加载中有什么
  • 邮政编码,如果你一直潜伏在这里,你就知道我们要说什么了。我很乐意提供帮助,但我们确实需要看看代码中发生了什么。
  • @EpicKip 你是什么意思?是否要我发布表单的Load 事件和constructor
  • @Trey 我很乐意向您展示代码,如果我知道要向您展示什么...我可以发布什么?
  • @frikyfriky11 您在某个地方访问索引,可能是偶然的,但它并不是白说。

标签: c# .net winforms datagridview indexoutofrangeexception


【解决方案1】:

首先,感谢您的反馈。

非常感谢用户 @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本身。

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

再次感谢,祝你有美好的一天! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多