WinForms.DataGridView控制項

來源:互聯網
上載者:User

使用資料繫結的方式在其中顯示資料
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 控制項中的列排序模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.