2009-11-12 19 views
4

什么是最好的集合数据绑定列表在C#中一个DataGridView当使用时使用?我目前只使用通用列表,但当列表中添加或删除对象时,数据网格不会更新。我看使用的BindingList或的ObservableCollection,但不能决定这将是最好使用能够将更新并易于梳理/过滤器,而无需重新绑定到数据网格。目前,我正在使用.NET 3.5框架的窗体工作,计划很快转入WPF。收藏好,以绑定到C#一个DataGridView

+0

我也使用LINQ做排序和筛选,现在的对象泛型列表上。我也可以使用BindingList ,但这样做会迫使我将列表重新绑定到数据网格。 – norlando 2009-11-12 15:56:00

回答

8
  • ObservableCollection<T>不会为一个DataGridView工作:它实现INotifyCollectionChanged,不IBindingListDataGridView不知道INotifyCollectionChanged。它旨在用于WPF绑定,并未在Windows窗体中使用
  • BindingList<T>是一个不错的选择,但请注意,它不支持排序或过滤框。但是,您可以在网上找到这些功能的一些自定义实现。
  • DataTable可能是你最好的选择,如果你需要排序和/或过滤能力
+0

我可以在一组对象中使用DataTable吗? – norlando 2009-11-13 19:52:06

+0

你是什么意思?你可以再详细一点吗 ? – 2009-11-14 00:37:18

+0

我有一个3层应用程序与业务对象层,我需要收集一种类型的业务对象。这可能与数据表有关吗?我认为DataTable只能用于数据库中的数据海峡。 – norlando 2009-11-19 15:14:11

0

的DataTable,也许?

另外,还可以经常迫使GridView的重画,并通过调用DataGridview.Invalidate(包括新项目)添加项目之后。

0

我不认为有什么样的类型的集合的硬/一般规则是最适合的DataGridView。

这真的取决于几个因素:
- 数据的性质
- (如CRUD,排序,过滤器),什么是操作(如果有的话)从UI到DB进行
- 数据的大小
等等。

0

我创建了自己的集合继承BindingList,它支持排序,过滤等。它现在运行良好,但是很多工作,我不真的建议做一个自己......我觉得有一个在CodeProject或类似的网站已经实现了,我给你的链接,如果我找到它。

编辑:

我发现this CodeProject article与IBindingList的的实现它支持排序,筛选等,我没有,虽然测试它,所以我不知道该怎么好实现,但它可能是值得检查出来。

1

数据绑定框架在WinForms和WPF之间是完全不同的,所以(一般来说),它们都没有“最佳选择”。

对于WinForms,使用通用的BindingList<T>将完成你想要的大部分(尽管它不处理对单个项目的更改;你必须自己实现)。

对于WPF,ObservableCollection<T>也有类似的用途。

+0

有什么原因,的BindingList 不会在WPF工作? – norlando 2009-11-12 16:11:16

+0

'的BindingList '使用'IBindingList'接口,这是什么的WinForms用于其列表数据绑定。 WPF使用'INotifyCollectionChanged'。 – 2009-11-12 16:39:20

1

其实微软reccomends使用集合作为绑定集合,而不是一个列表,因为这样做将当如自动功能的能力删除项目,清除收集或设置现有项目的值。

Collection Class MSDN上。

1

如果你想收集绑定到一个DataGridView,我会使用一个的BindingList。虽然绑定列表不支持从框中排序,但您可以通过创建自己的列表来扩展它,该列表来自BindinList并实现自己的排序。

参见如何做到这一点here