使用資料繫結的方式在其中顯示資料
1. 可以在設計時不添加Columns集合,指定DataSource屬性後,列的出現順序無法預料(.NET 會將該DataSource對象的全部公用屬性拉上去顯示),目前我也不知道是否可以預先安排;
2.可以在設計時手工添加Columns集合,並指定這些欄位標題的DataPropertyName屬性為你想在這一資料行繫結的屬性名稱;這種方式可以達到預先安排列的出現順序的目的。(這一方式對於資料來源是DataTable對象時也是實用的,這時DataPropertyName屬性對應於DataTable的列名稱)
以上2種情況都無法讓.NET為你自動排序,你單擊欄位標題,不會出現排序的表徵圖,這一排序功能估計要手工實現了。
在資料列上執行排序操作
這部分的內容非常多而且複雜,我只能就我遇到的問題慢慢的補充完整了。
我使用了資料來源綁定的方式,將DataGridView綁定到一個List<>對象上,發現沒法自動排序,於是手工去在事件ColumnHeaderMouseClick中實現排序代碼,大致這個樣子:
ColumnHeaderMouseClick事件中實現排序
private void dgvFiles_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
DataGridViewColumn col = dgvFiles.Columns[e.ColumnIndex];
ListSortDirection direction;
if (dgvFiles.SortOrder == SortOrder.Ascending)
{
direction = ListSortDirection.Descending;
}
else
{
direction = ListSortDirection.Ascending;
}
dgvFiles.Sort(col, direction);
}
在我單擊欄位標題調試時,遭遇如下異常:System.InvalidOperationException: DataGridView 控制項必須綁定到 IBindingList 對象才能排序
查看一下MSDN,List<>果然沒有實現IBindingList介面。
最後的解決方案:將資料來源更改為DataTable對象,就可以自動實現排序了(以前的手工添加行也是可以自動實現排序的)。
如君所見,這似乎並未涉及到如何編寫排序代碼的問題;呵呵,以後遭遇到了再來補充了。
MSDN中的這2個條目(自動連結到你本地的MSDN文檔)對排序問題闡述的非常清楚,有時間研究研究,最好在項目中研究,免得看了又忘了:
如何:自訂 Windows 表單 DataGridView 控制項中的排序
Windows 表單 DataGridView 控制項中的列排序模式