Use*_*ser 11 c# datagridview bindinglist bindingsource winforms
我想DataGridView在Windows窗体应用程序中显示一个人员列表.我希望我的服务层返回Person对象列表(例如IList<Person>).我希望列表中的更改能够反映在其中DataGridView,反之亦然.我的理解是使用BindingSource便利的工作DataGridView.我的问题是双向数据绑定工作,我需要:
//pseudo code
BindingSource.DataSource = IBindingList<Person>
Run Code Online (Sandbox Code Playgroud)
或者我可以这样做:
BindingSource.DataSource = IList<Person>
Run Code Online (Sandbox Code Playgroud)
有什么不同?如果我的列表更改将以DataGridView任何方式更新?如果我必须使用BindingList它,似乎有点不稳定(因为创建一个依赖)BindingList从我的服务层返回一个,有没有办法解决这个问题?
微软称BindingList(在备注部分)
http://msdn.microsoft.com/en-us/library/ms132679.aspx:
"但是,典型的解决方案程序员将使用提供数据绑定功能的类,例如
BindingSource,而不是直接使用BindingList<T>."
Bra*_*ith 11
绑定到IList<Person>遗嘱只会给你单向绑定; 对列表或列表项的更改不会反映在DataGridView.您可以使用BindingList或BindingSource来获取此功能,但是您的Person类仍然需要支持INotifyPropertyChanged,否则只有在列表中添加/删除项目时才会获得同步,而不是在列表项本身发生更改时.
如果你想避免依赖System.Windows.Forms,你可以ObservableCollection<Person>改用; 这支持必要的更改通知,因此可以用作双向绑定源.
如果使用BindingList<T>,则通过基础列表所做的更改将反映在数据绑定控件中,因为 BindingList 在列表更改时会引发事件。大多数其他集合都没有。
如果您使用普通集合作为数据源,那么您通过其他数据绑定控件(或通过 BindingSource)所做的更改仍将被反映,但直接对基础集合所做的更改将不会反映。