当我为List<MyClass>
分配DataSource
DataGridView
时,当我点击列标题时,没有任何反应,排序也无效;但是如果我使用DataTable
作为数据源,那么当点击标题时,排序就会完美。
问题是:当我点击列标题时,应该使用哪种类型的集合类型来启用DataGridView
中的排序,就像它与DataTable
一起使用一样?
答案 0 :(得分:3)
排序如何在数据绑定的DataGridView中工作
当您单击数据绑定DataGridView
中启用了自动排序的列标题时,首先检查DataSource
属性后面的列表是否为IBindingList
,然后使用SupportsSorting
检查列表是否支持排序。然后它调用ApplySort
方法对列表进行排序。
当您使用DataTable
作为网格的数据源时,数据源背后的列表实际上是DataView
,它实现了支持排序的IBindingList
。
要自动支持在DataGridView
中进行排序,列表应实现IBindingList
及其与排序相关的成员。
在BindingList&lt; T&gt;
中启用排序要使IBindingList
的类型列表实现也支持排序,一个好的选择是从BindingList<T>
派生。它实现IBindingList
但默认情况下不支持排序。您可以覆盖与排序相关的方法和属性:SupportsSortingCore
,IsSortedCore
,SortPropertyCore
,SortDirectionCore
和ApplySortCore
。
现有实施
有一些实现:
如果您使用的是实体框架,则DbSet<T>
的{{3}}属性的ToBindingList
方法会返回可排序的BindingList<T>
。