DataGridView使用通用列表单击列标题进行排序

时间:2016-06-23 15:52:51

标签: c# winforms datagridview

当我为List<MyClass>分配DataSource DataGridView时,当我点击列标题时,没有任何反应,排序也无效;但是如果我使用DataTable作为数据源,那么当点击标题时,排序就会完美。

问题是:当我点击列标题时,应该使用哪种类型的集合类型来启用DataGridView中的排序,就像它与DataTable一起使用一样?

1 个答案:

答案 0 :(得分:3)

排序如何在数据绑定的DataGridView中工作

当您单击数据绑定DataGridView中启用了自动排序的列标题时,首先检查DataSource属性后面的列表是否为IBindingList,然后使用SupportsSorting检查列表是否支持排序。然后它调用ApplySort方法对列表进行排序。

当您使用DataTable作为网格的数据源时,数据源背后的列表实际上是DataView,它实现了支持排序的IBindingList

要自动支持在DataGridView中进行排序,列表应实现IBindingList及其与排序相关的成员。

在BindingList&lt; T&gt;

中启用排序

要使IBindingList的类型列表实现也支持排序,一个好的选择是从BindingList<T>派生。它实现IBindingList但默认情况下不支持排序。您可以覆盖与排序相关的方法和属性:SupportsSortingCoreIsSortedCoreSortPropertyCoreSortDirectionCoreApplySortCore

现有实施

有一些实现: