我想在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>
。“
如果使用BindingList<T>
,则通过基础列表进行的更改将反映在数据绑定控件中,因为BindingList在更改列表时会引发一个事件。其他大多数收藏集则没有。
绑定到IList<Person>
只会给您单向绑定;对列表或列表项目所做的更改不会反映在DataGridView
中。您可以改用BindingList
或BindingSource
来获得此功能,但您的Person
类仍将需要支持INotifyPropertyChanged
,否则,只有在将项目添加到列表中/从列表中删除项目时,您才会获得同步,列表项本身更改时不会。
DataGridView的属性检查。AllowUserToAddRows:真->假