我有一个对象的List,设置为BindingSource的DataSource,设置为DataGridView的DataSource。然后我添加了一个DataGridViewButtonColumn,我想要点击一下从集合中删除该记录。所以我只是从DataGridView CellClick事件中调用collection.RemoveAt(e.rowIndex)。但是这会产生IndexOutOfRange异常; “1没有价值”..
发生在这里?我可能有一个模糊的想法,但想要确切地了解哪些事件失败等等。我需要做些什么来正确执行此操作?
修改 如果我使用BindingList,这似乎不会发生..但是当使用List时,我遇到了这个问题..
答案 0 :(得分:1)
您看到错误的原因是因为您最终绑定到List
。 List
不包含您的DataGridView需要接收的更改通知,以反映您所做的更改。
如果您真的想解决此问题,可以执行以下操作:在对List
进行更改之前,将BindingSource的DataSource属性设置为Nothing
。完成更改后,将List
重置为DataSource。
这是一个非常难看的解决方案,你可以想象。您要做的事情是绑定到实现IBindingList
的对象,您创建的自定义集合或BindingList。
这是进一步调查此问题的合理起点:
DataGridView Control Overview (Windows Forms)