在C#中绑定到DataGridView时使用的好集合
将数据列表绑定到C#中的DataGridview时,最好的集合是什么? 我目前只使用通用列表,但是当列表中添加或删除对象时,数据网格不会更新。 我已经看过使用BindingList或ObservableCollection,但是无法确定最好使用哪个更新并且易于排序/过滤而无需重新绑定到数据网格。 我目前正在.Net 3.5框架上以windowsforms工作,计划很快转向WPF。
-
ObservableCollection
不适用于DataGridView
:它实现了INotifyCollectionChanged
,而不是IBindingList
,而DataGridView
不知道INotifyCollectionChanged
。 它适用于WPF绑定,不用于Windows窗体 -
BindingList
是一个不错的选择,但请注意它不支持开箱即用的排序或过滤。 但是,您可以在Web上找到这些function的一些自定义实现。 - 如果您需要排序和/或过滤function,
DataTable
可能是您的最佳选择
WinForms和WPF之间的数据绑定框架完全不同,因此(一般而言),它们都没有“最佳选择”。
对于WinForms,使用genericsBindingList
将完成您想要的大部分内容(尽管它不处理对单个项的更改;您必须自己实现)。
对于WPF, ObservableCollection
具有类似的用途。
实际上,Microsoft建议使用Collection作为绑定集合而不是List,因为它能够执行自动function,例如添加和删除项目,清除集合或设置现有项目的值。
MSDN上的集合类 。
如果要将集合绑定到datagridview,我将使用绑定列表。 虽然绑定列表不支持开箱即用,但您可以通过创建自己的列表来扩展它,该列表派生自BindinList并实现您自己的排序。
请参阅此处了解如何执行此操作。
也许是DataTable?
此外,您通常可以在添加项目后立即通过调用DataGridview.Invalidate()来强制gridview重新绘制并包含新项目。
我不认为有哪种类型的集合最适合DataGridView的硬性/一般规则。
这实际上取决于几个因素:
– 数据的性质
– 从UI到DB执行的操作(如果有)(例如CRUD,排序,过滤)
– 数据大小
等等..
我创建了自己的集合inheritance自BindingList,它支持排序,过滤等。它现在运行良好,但是很多工作,我不建议你自己做一个…我认为已经在CodeProject上实现了一个或类似的网站,如果我找到它,我会给你链接。
编辑:
我发现这个CodeProject文章带有IBindingList的实现,它支持排序,过滤等。虽然我没有测试它,所以我不知道实现有多好,但可能值得一试。