WinForms DataBinding是否需要BindingSource和BindingList?

问题描述 投票:11回答:3

我想在Windows窗体应用程序的DataGridView中显示人员列表。我希望我的服务层返回一个Person对象的列表(例如IList<Person>)。我希望列表中的更改反映在DataGridView中,反之亦然。我的理解是使用BindingSource有助于使用DataGridView。我的问题是双向数据绑定可以正常工作,我是否需要:

//pseudo code
BindingSource.DataSource = IBindingList<Person>

或者我可以做:

BindingSource.DataSource = IList<Person>

有什么区别?如果我对列表进行更改,DataGridView会以任何一种方式更新吗?而且,如果我必须使用BindingList,从我的服务层返回BindingList似乎有点糊涂(因为创建了依赖项),有没有解决的办法?

Microsoft说BindingList(在“备注”部分中)http://msdn.microsoft.com/en-us/library/ms132679.aspx

“但是,典型的解决方案程序员将使用一个提供数据绑定功能,例如BindingSource,而不是直接使用BindingList<T>。“

c# winforms datagridview bindingsource bindinglist
3个回答
3
投票

如果使用BindingList<T>,则通过基础列表进行的更改将反映在数据绑定控件中,因为BindingList在更改列表时会引发一个事件。其他大多数收藏集则没有。


11
投票

绑定到IList<Person>只会给您单向绑定;对列表或列表项目所做的更改不会反映在DataGridView中。您可以改用BindingListBindingSource来获得此功能,但您的Person类仍将需要支持INotifyPropertyChanged,否则,只有在将项目添加到列表中/从列表中删除项目时,您才会获得同步,列表项本身更改时不会。


0
投票

DataGridView的属性检查。AllowUserToAddRows:真->假

© www.soinside.com 2019 - 2024. All rights reserved.