You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过点击表头用Linq对绑定List<T>的DataGridView排序

绑定泛型List的DataGridView轻量排序方案

实现思路

直接借助DataGridView的列头点击事件,结合LINQ动态排序原泛型List,无需添加额外类、依赖,也不需要修改List的原始类型。

具体步骤

  1. 初始化配置
    开启DataGridView的排序支持,并设置列的排序模式:

    // 允许用户点击列头触发排序
    dataGridView1.AllowUserToSortColumns = true;
    // 为所有列设置程序控制排序模式
    foreach (DataGridViewColumn col in dataGridView1.Columns)
    {
        col.SortMode = DataGridViewColumnSortMode.Programmatic;
    }
    // 绑定初始泛型List数据源
    List<YourModel> dataList = GetYourData(); // 替换为你的数据获取逻辑
    dataGridView1.DataSource = dataList;
    
  2. 处理列头点击事件
    为DataGridView的ColumnHeaderMouseClick事件添加逻辑,实现动态排序与排序图标更新:

    private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        var clickedCol = dataGridView1.Columns[e.ColumnIndex];
        var currentList = dataGridView1.DataSource as List<YourModel>;
        if (currentList == null) return;
    
        // 切换排序方向
        var sortDir = clickedCol.HeaderCell.SortGlyphDirection == ListSortDirection.Ascending 
            ? ListSortDirection.Descending 
            : ListSortDirection.Ascending;
    
        // 根据点击列执行对应排序
        switch (clickedCol.Name)
        {
            case "IdColumn": // 替换为你的列名
                currentList = sortDir == ListSortDirection.Ascending 
                    ? currentList.OrderBy(x => x.Id).ToList() 
                    : currentList.OrderByDescending(x => x.Id).ToList();
                break;
            case "NameColumn": // 替换为你的列名
                currentList = sortDir == ListSortDirection.Ascending 
                    ? currentList.OrderBy(x => x.Name).ToList() 
                    : currentList.OrderByDescending(x => x.Name).ToList();
                break;
            // 其他需要排序的列依次添加case
        }
    
        // 重新绑定数据源并更新排序图标
        dataGridView1.DataSource = null;
        dataGridView1.DataSource = currentList;
        clickedCol.HeaderCell.SortGlyphDirection = sortDir;
    }
    

方案优势

  • 无需引入任何第三方依赖或额外辅助类
  • 保留原泛型List的数据类型,无需转换为DataTable或其他集合
  • 代码逻辑简洁,仅需事件处理与LINQ排序语句即可完成

内容的提问来源于stack exchange,提问作者Carlos M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:40:10