datagridview点击列头对当前列进行排序的功能无效

news/2024/12/11 16:54:47/文章来源:https://www.cnblogs.com/gho13954/p/18599980

DataGridView 的默认行为是支持通过单击列头对列进行排序,但在以下情况下可能会取消该功能或无法使用:

1. 绑定的数据源不支持排序

如果 DataGridView 的数据源是绑定到一个不支持排序的集合(例如,List 或未实现 IBindingList 的对象),排序功能会被禁用。

2. 列的 SortMode 设置为 DataGridViewColumnSortMode.NotSortable

每列都有一个 SortMode 属性,默认值为 Automatic。如果将 SortMode 设置为 NotSortable,则禁用了点击列头排序功能。

3. 事件处理干扰了默认排序行为

如果在 ColumnHeaderMouseClick 事件中写了自定义代码,且未调用 DataGridView.Sort 方法,可能会导致排序功能被覆盖。


#### 当DataGridView 的数据源是List的时候无法实现单击列头对列进行排序,需要手动写ColumnHeaderMouseClick事件实现单击列头排序

1.为当DataGridView添加ColumnHeaderMouseClick事件

image

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);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/850924.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Salesforce Q3财报:营收94亿美金,净利润同比增长25%,靠什么实现逆风翻盘?

Salesforce在发布第三季度财报后,其股价迎来了久违的高光时刻。周三上午,Salesforce股票(CRM)报收367美元,较前一交易日的331.43美元上涨了10%,一跃成为市场关注的焦点。 本季度我们在收入、利润率、现金流和cRPO等各项财务指标上再次实现了卓越的表现。Agentforce,作为…

c# 创建Access数据库文件,并创建表,增加一行数据

需求:每隔一段时间存一条数据到Access数据库,数据库文件以日期命名,把这个功能封装以供调用 分解任务:1新建数据库文件 2新建数据库表 3向数据库表中增加数据 4需要有日志记录执行结果 5由于过多的dll不易于传播维护,需要将这些dll封装 参考资料: 关闭ADOX.Catalo…

转载:【AI系统】AI 系统与程序代码关系

模型算法的开发者一般会通过使用 AI 框架提供 Python 等高级语言的 API,来编写对应的 AI 算法,而 AI 算法的底层系统问题被当前层抽象隐藏。到底在代码背后 AI 系统的每一层发生和执行了什么?有哪些有意思的系统设计问题? 本文我们将从一个具体的 PyTorch 实现一个 LeNet5 …

VUE使用Canvas元素实现手绘签名(重新签名+撤回一笔)

VUE使用Canvas元素实现手绘签名(重新签名+撤回一笔) 效果:代码实现:本文来自博客园,作者:じ逐梦,转载请注明原文链接:https://www.cnblogs.com/ZhuMeng-Chao/p/18599924

雷池社区版的防爬虫功能之Bot 防护 - 人机验证

​ 介绍 互联网上有来自真人用户的流量, 但更多的是由爬虫, 漏洞扫描器, 蠕虫病毒, 漏洞利用程序等自动化程序发起的流量. 识别真人用户对提升网站的安全性至关重要, 也是防爬虫, 防扫描的关键. 该功能开启后,当用户访问您的网站时,雷池会预先检查客户端环境的合法性,如下图…

精美的jQuery科学计算器插件

jsRapCalculator是一款jQuery科学计算器插件。该科学计算器提供除加减乘除外,还有或和异或、取反、八进制,十六进制和二进制等功能。在线演示 下载使用方法 在页面中引入jquery和jsRapCalculator.js文件和样式文件jsRapCalculator.css。<link rel="stylesheet"…

# electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题

electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题这篇文章是接我cocos专栏的上一篇文章继续写的,我上一篇文章写的是 cocos 开发触摸屏项目,需要嵌入一个网页用来展示,最后通过 electron 打包成 exe 程序,而且网页里面是需要调用电脑摄像头进行拍摄的。问题 通过…

制作一个简单的单片机上的boot系统

此篇文章在2023年3月24日被记录ARM单片机使用自定义bootloader 什么是BOOT 懂得计算机的同学都知道,电脑在开机时,从上电的那一刻开始,首先会进入bios,这个bios的作用就类似于单片机中的bootloader。万一我们浏览某些不可言状的网站导致系统崩溃时,我们就可以在这个临时的…

Amazon S3 概念及如何集成到 .net 8 C#

本文主要分为两个部分: 1、Amazon S3 相关概念 2、.net 集成的代码 * 阅读提示 :鼠标悬停在 章节标题 上可见 文章目录Amazon S3(Simple Storage Service)是一个高度可扩展、数据可用性高、安全性强的对象存储服务。 Amazon S3 使用对象存储架构,数据以对象的形式存储在桶…

SAP QM 客户退货检验的三种实现方案

SAP QM 客户退货检验的三种实现方案在SAP项目上,客户退货检验场景经常遇到。如果项目上启用QM模块,要在SAP 里实现客户退货场景的质量检验,有三种实现方式。本文将对这三种实现方案做简要说明,与同行共勉。1, 客户退货的收货启用移动类型651,物料激活检验类型06, 退货交货…

违规抽烟识别智慧矿山一体机在矿山监控项目中,如何选择合适的POE网络摄像机以及常见问题处理?

随着技术的飞速进步,POE(Power over Ethernet,以太网供电)技术在安防监控领域的应用越来越广泛,它为网络监控施工带来了革命性的改变。POE技术允许通过单一的以太网电缆同时传输数据和电力,大大简化了监控系统的布线复杂度,并降低了安装成本。在矿山监控系统中,选择适合…