Jef*_*are 12 c# data-binding collections bindingsource winforms
我想DataGridView在Windows窗体应用程序中显示自定义集合.此自定义集合实现ICollection,和IEnumerable.我已经设置了一个BindingSource,使用该集合作为.DataSource属性.将DataGridView被设置为使用我的BindingSource,因为它的数据源.当我使用该BindingSource.Add()方法向集合添加新项目时,使用DataGridView新项目正确更新.该BindingSource数据源,在另一方面,没有:
MyCustomCollection myCollection = new MyCustomCollection();
myCollection.Add(myCustomObject1);
myCollection.Add(myCustomObject2);
myBindingSource.DataSource(myCollection);
myBindingSource.Add(myCustomObject3);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,myBindingSource的内部List包含正确的记录数(3),并且DataGridView还包含三个记录,但myCollection只包含两个记录.我知道更改底层myCollection不会更新BindingSource或者DataGridView,因为它不是a BindingList<T>,但我认为BindingSource直接更新a 会确保myCollection同时更新.
有没有办法使用不是a的集合,BindingList<T>并在与BindingSource直接交互时更新?
更新:我在所有部分(Collection,BindingSource,DataGridView)上更新数据的一种方法如下:
myCollection.Add(myCustomObject3);
myBindingSource.DataSource = null;
myBindingSource.DataSource = myCollection;
Run Code Online (Sandbox Code Playgroud)
我很确定有更好的方法可以解决这个问题,但这是我生成预期结果的唯一方法.
小智 6
问题是填充适配器.加载表单时,将为您完成填充.只需确保进行重新填充,然后在发布任何数据更改后跟进重置绑定,Grid将刷新.
示例:
WorkTableAdapter.Insert(objData.XAttribute, "",
objData.YAttribute,objLoanData.Amount_IsValid, DateTime.Now, DateTime.Now);
this.WorkTableAdapter.Fill(this.POCDataSet.Work);
this.WorkBindingSource.ResetBindings(false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37782 次 |
| 最近记录: |