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

我写了一个小程序来记录数据变化,它使用一个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 是引用类型,但我不知道如何验证它,或者不是这样?


希望有人能帮助我,谢谢。


慕后森
浏览 197回答 2
2回答

芜湖不芜

A&nbsp;DataGridView- 实际上任何绑定控件 - 需要在数据更改时从数据源接收通知,以便知道它需要更新。这需要一个实现IBindingList接口的对象。在List<T>没有实现这个接口等电网不知道当列表数据的变化,从而不更新。您应该做的是将您的列表绑定到 aBindingSource然后将其绑定到网格。在这种情况下,当您更改列表时,您可以调用 的适当方法BindingSource,例如ResetBindings,向网格提供适当的通知。请注意,当我说“通知”时,我指的是一个事件。一个IBindingList对象引发其ListChanged事件,控件处理该事件。

慕盖茨4494581

您可以使用Binding 源来做到这一点:var source = new BindingSource();List<StockBalance> balances = ReadDataTable(dataTable);List<StockBalance> stockBalances = (List<StockBalance>)dataGridView1.DataSource ?? new List<StockBalance>();stockBalances.AddRange(balances);&nbsp;source.DataSource = stockBalances;&nbsp;dataGridView1.AutoGenerateColumns=true;&nbsp;dataGridView1.DataSource = source;
打开App,查看更多内容
随时随地看视频慕课网APP