datagridview点击列头对当前列进行排序的功能无效
DataGridView 的默认行为是支持通过单击列头对列进行排序,但在以下情况下可能会取消该功能或无法使用:
1. 绑定的数据源不支持排序
如果 DataGridView 的数据源是绑定到一个不支持排序的集合(例如,List
2. 列的 SortMode 设置为 DataGridViewColumnSortMode.NotSortable
每列都有一个 SortMode 属性,默认值为 Automatic。如果将 SortMode 设置为 NotSortable,则禁用了点击列头排序功能。
3. 事件处理干扰了默认排序行为
如果在 ColumnHeaderMouseClick 事件中写了自定义代码,且未调用 DataGridView.Sort 方法,可能会导致排序功能被覆盖。
#### 当DataGridView 的数据源是List<T>的时候无法实现单击列头对列进行排序,需要手动写ColumnHeaderMouseClick事件实现单击列头排序
1.为当DataGridView添加ColumnHeaderMouseClick事件
2.ColumnHeaderMouseClick代码
private void dgvMain_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { string columnName = dgvMain.Columns[e.ColumnIndex].DataPropertyName; // 获取绑定的字段名称 var dataSource = bsMain.DataSource as List<GroupedKanBanInfo>;//List<T>,实际情况换成需要的实体类 if (dataSource == null) return; // 根据列名排序,支持升序和降序 if (dgvMain.Tag == null || dgvMain.Tag.ToString() != columnName) // 默认升序 { bsMain.DataSource = dataSource.OrderBy(item => GetPropertyValue(item, columnName)).ToList(); dgvMain.Tag = columnName; // 保存当前排序列,用于下次判断 } else // 切换为降序 { bsMain.DataSource = dataSource.OrderByDescending(item => GetPropertyValue(item, columnName)).ToList(); dgvMain.Tag = null; // 重置 } bsMain.ResetBindings(false); } // 通用的获取属性值方法 private object GetPropertyValue(object obj, string propertyName) { if (obj == null || string.IsNullOrEmpty(propertyName)) return null; var prop = obj.GetType().GetProperty(propertyName); return prop?.GetValue(obj); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!