我想DataGridView
在 Windows 窗体应用程序中显示自定义集合。此自定义集合实现ICollection
, 和IEnumerable
. 我设置了一个BindingSource
, 使用集合作为 .DataSource 属性。DataGridView
设置为使用我的BindingSource
数据源。BindingSource.Add()
当我使用该方法将新项目添加到集合中DataGridView
时,新项目会正确更新。BindingSource
另一方面,DataSource 不会:
MyCustomCollection myCollection = new MyCustomCollection();
myCollection.Add(myCustomObject1);
myCollection.Add(myCustomObject2);
myBindingSource.DataSource(myCollection);
myBindingSource.Add(myCustomObject3);
在上面的代码中,myBindingSource 的内部 List 包含正确数量的记录 (3),并且DataGridView
也包含三个记录,但 myCollection 只包含两个记录。我知道更改基础 myCollection 不会更新 theBindingSource
或 the DataGridView
,因为它不是 a BindingList<T>
,但我的印象是BindingSource
直接更新 a 将确保 myCollection 同时更新。
有没有办法使用不是 a 的集合BindingList<T>
并在与直接交互时更新它BindingSource
?
更新:我在所有部分(Collection、BindingSource、DataGridView)中更新数据的一种方法如下:
myCollection.Add(myCustomObject3);
myBindingSource.DataSource = null;
myBindingSource.DataSource = myCollection;
我很确定有更好的方法来解决这个问题,但这是产生我期望的结果的唯一方法。