gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:25:59 25 4
gpt4 key购买 nike

我想在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com