當我將List<MyClass>
指定爲DataGridView
的DataSource
時,當我單擊列標題時,沒有任何反應,排序不起作用;但是如果我使用DataTable
作爲數據源,那麼當單擊標題時,排序工作就很完美。DataGridView通過單擊列標題進行排序 - 使用通用列表
現在的問題是:當我點擊列標題時,應該使用哪種類型的集合類型來啓用DataGridView
中的排序,就像它與DataTable
一起工作?
當我將List<MyClass>
指定爲DataGridView
的DataSource
時,當我單擊列標題時,沒有任何反應,排序不起作用;但是如果我使用DataTable
作爲數據源,那麼當單擊標題時,排序工作就很完美。DataGridView通過單擊列標題進行排序 - 使用通用列表
現在的問題是:當我點擊列標題時,應該使用哪種類型的集合類型來啓用DataGridView
中的排序,就像它與DataTable
一起工作?
排序如何在數據綁定的DataGridView
當您單擊列標題一個它的自動分揀啓用數據綁定DataGridView
,首先它會檢查DataSource
財產背後的名單是IBindingList
,然後使用SupportsSorting
檢查列表是否支持排序。然後它調用ApplySort
方法來對列表進行排序。
當您使用網格的DataTable
作爲數據源,數據源背後的名單實際上是一個DataView
它實現IBindingList
是支持排序。
要在DataGridView
中自動支持排序,該列表應實現IBindingList
及其與排序相關的成員。
啓動排序中的BindingList <牛逼>
要鍵入列表實現的IBindingList
也支持排序,一個不錯的選擇,從BindingList<T>
獲得。它實現IBindingList
,但它不支持默認排序。您可以覆蓋它與排序相關的方法和屬性:SupportsSortingCore
,IsSortedCore
,SortPropertyCore
,SortDirectionCore
和ApplySortCore
。
現有實現
有一些實現辦法:這是在實體框架使用
SortableSearchableList<T>
它如果您正在使用實體框架在MSDN article
公佈的DbSet<T>
的Local
財產ToBindingList
方法返回一個排序BindingList<T>
。
的可能的複製[如何當用戶點擊列標題啓用的DataGridView排序?](http://stackoverflow.com/questions/5553100/how-to-enable-datagridview-sorting-when-user -clicks-on-the-column-header) – endofzero
可排序的BindingList是你正在尋找的東西。你可以找到一些實現。例如來自Microsoft的[this one](https://entityframework.codeplex.com/SourceControl/latest#src/EntityFramework/Internal/SortableBindingList.cs),用於實體框架。或者[這一個](http://go.microsoft.com/fwlink/?LinkId=70372&clcid=0x409)從MSDN [文章](https:// msdn。microsoft.com/en-us/library/aa480736.aspx)。 –