2016-06-23 73 views
2

當我將List<MyClass>指定爲DataGridViewDataSource時,當我單擊列標題時,沒有任何反應,排序不起作用;但是如果我使用DataTable作爲數據源,那麼當單擊標題時,排序工作就很完美。DataGridView通過單擊列標題進行排序 - 使用通用列表

現在的問題是:當我點擊列標題時,應該使用哪種類型的集合類型來啓用DataGridView中的排序,就像它與DataTable一起工作?

+0

的可能的複製[如何當用戶點擊列標題啓用的DataGridView排序?](http://stackoverflow.com/questions/5553100/how-to-enable-datagridview-sorting-when-user -clicks-on-the-column-header) – endofzero

+0

可排序的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)。 –

回答

3

排序如何在數據綁定的DataGridView

當您單擊列標題一個它的自動分揀啓用數據綁定DataGridView,首先它會檢查DataSource財產背後的名單是IBindingList,然後使用SupportsSorting檢查列表是否支持排序。然後它調用ApplySort方法來對列表進行排序。

當您使用網格的DataTable作爲數據源,數據源背後的名單實際上是一個DataView它實現IBindingList是支持排序。

要在DataGridView中自動支持排序,該列表應實現IBindingList及其與排序相關的成員。

啓動排序中的BindingList <牛逼>

要鍵入列表實現的IBindingList也支持排序,一個不錯的選擇,從BindingList<T>獲得。它實現IBindingList,但它不支持默認排序。您可以覆蓋它與排序相關的方法和屬性:SupportsSortingCore,IsSortedCore,SortPropertyCore,SortDirectionCoreApplySortCore

現有實現

有一些實現辦法:這是在實體框架使用