c# - 在 WinForms 中更新 BindingSource 不会更新数据源集合

标签 c# winforms data-binding collections bindingsource

我想在 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 的内部列表包含正确数量的记录 (3),并且 DataGridView也包含三个记录,但 myCollection 只包含两个记录。我知道更改基础 myCollection 不会更新 BindingSourceDataGridView , 因为它不是 BindingList<T> , 但我的印象是更新 BindingSource直接将确保 myCollection 同时更新。

有没有办法使用不是 BindingList<T> 的集合?并在与 BindingSource 交互时更新它直接?

更新:我在所有部分(Collection、BindingSource、DataGridView)中更新数据的一种方法如下:

myCollection.Add(myCustomObject3);
myBindingSource.DataSource = null;
myBindingSource.DataSource = myCollection;

我很确定有更好的方法来解决这个问题,但这是产生我预期结果的唯一方法。

最佳答案

问题是 Fill Adaptor。当您加载表单时,Fill 已为您完成。 只需确保执行重新填充,然后在任何数据更改后使用重置绑定(bind)跟进,网格将得到刷新。

示例:

WorkTableAdapter.Insert(objData.XAttribute, "",
  objData.YAttribute,objLoanData.Amount_IsValid, DateTime.Now, DateTime.Now);
this.WorkTableAdapter.Fill(this.POCDataSet.Work);
this.WorkBindingSource.ResetBindings(false);

关于c# - 在 WinForms 中更新 BindingSource 不会更新数据源集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571451/

相关文章:

javascript - 当 customElement : true is set 时,Svelte 绑定(bind)不起作用

c# - 在 C# 中,通过类(class)成员之一搜索类(class)列表的最佳方式是什么?

c# - 为什么这个 SQL Server INSERT 查询不执行?

c# - 在逻辑应用程序中运行时Azure函数404错误

c# - 如何将表单的背景图像设置为用户选择的图像?

c# - 仅允许减号 (-) 的正则表达式

c# - 如何将不同的查询结果绑定(bind)到组合框并将其作为选定单元格值传递

c# - C#中如何从数据表中逐行读取数据

c# - 在 C# 中使用 Redis 的聊天客户端卡住。任何人都可以提出任何建议吗?

在没有 InvokeRequired 的多线程场景中,Winforms 数据绑定(bind)到业务对象?