为了账号安全,请及时绑定邮箱和手机立即绑定

使用`List<T>`进行数据绑定

使用`List<T>`进行数据绑定

C#
慕后森 2021-11-28 18:47:34
我写了一个小程序来记录数据变化,它使用一个DataGridView,它的数据源是一个List,但是我对DataBingding有一个疑问。DataTable dataTable = GetBalance();List<StockBalance> balances = ReadDataTable(dataTable);List<StockBalance> stockBalances = (List<StockBalance>)dataGridView1.DataSource ?? new List<StockBalance>();stockBalances.AddRange(balances);dataGridView1.DataSource = stockBalances;以上代码无法刷新DataGridView,余额中的数据不会显示在DataGridView中,而stockBalances包含所有新数据,但下面的代码可以归档:balances.AddRange(stockBalances);dataGridView1.DataSource = balances;我想原因是 List 和 StockBalance 是引用类型,但我不知道如何验证它,或者不是这样?希望有人能帮助我,谢谢。
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

DataGridView- 实际上任何绑定控件 - 需要在数据更改时从数据源接收通知,以便知道它需要更新。这需要一个实现IBindingList接口的对象。在List<T>没有实现这个接口等电网不知道当列表数据的变化,从而不更新。

您应该做的是将您的列表绑定到 aBindingSource然后将其绑定到网格。在这种情况下,当您更改列表时,您可以调用 的适当方法BindingSource,例如ResetBindings,向网格提供适当的通知。

请注意,当我说“通知”时,我指的是一个事件。一个IBindingList对象引发其ListChanged事件,控件处理该事件。


查看完整回答
反对 回复 2021-11-28
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

您可以使用Binding 源来做到这一点:


var source = new BindingSource();

List<StockBalance> balances = ReadDataTable(dataTable);

List<StockBalance> stockBalances = (List<StockBalance>)dataGridView1.DataSource ?? new List<StockBalance>();

stockBalances.AddRange(balances);


 source.DataSource = stockBalances;

 dataGridView1.AutoGenerateColumns=true;

 dataGridView1.DataSource = source;


查看完整回答
反对 回复 2021-11-28
  • 2 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信