在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的实现,它支持排序,过滤等。虽然我没有测试它,所以我不知道实现有多好,但可能值得一试。