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

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

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

2. 列的 SortMode 设置为 DataGridViewColumnSortMode.NotSortable

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

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

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


#### 当DataGridView 的数据源是List的时候无法实现单击列头对列进行排序,需要手动写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);
}

datagridview点击列头对当前列进行排序的功能无效的更多相关文章

  1. MFC listcontrol 分列 添加行数据 点击列头排序

    适用于 对话框程序 1.在工具箱中拖出 ListControl,然后右键-属性,view-Report 让你的ListControl变成这幅模样! 2.添加ListControl控件的control类 ...

  2. [WPF]ListView点击列头排序功能实现

    [转]   [WPF]ListView点击列头排序功能实现 这是一个非常常见的功能,要求也很简单,在Column Header上显示一个小三角表示表示现在是在哪个Header上的正序还是倒序就可以了. ...

  3. datagridview 点击列标题排序

    开发winform中,平时经常用到数据列表,我们大多选用datagridview,但是此控件本身没有排序的功能.参阅网上资料.留下标记,以后备用. datagridview的数据显示一般是通过数据绑定 ...

  4. C++ 简单实现MFC ListControl 点击列头排序

    说明: SetItemData可以为每一行绑定一个DWORD类型的变量.用GetItemData可以获得这个变量.举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID ...

  5. jqgrid 点击列头的超链接或按钮时,不触发列排序事件

    接上篇文章:jqgrid 将列头设置为超链接或按钮 如果在列头设置了超链接或按钮,在点击超链接或按钮时会触发列的排序事件. 原由:点击超链接/按钮会触发排序的冒泡事件 解决方法:点击超链接/按钮时,阻 ...

  6. winform dataGridView 点击列标题排序

    winform手动绑定数据后,点击列标题不能实现自动排序,苦苦寻找方法,发现下面的是可行的. //建立DataTable将当前dataGridView中的数据读进DataTable中 public D ...

  7. MFC CListControl 点击列头排序的实现

    SetItemData可以为每一行绑定一个DWORD类型的变量.用GetItemData可以获得这个变量.举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID,一般这 ...

  8. DataGridView使用技巧十三:点击列头实现升序和降序排序

    DataGridView 列有三种排序模式.每一列的排序模式是通过该列的 SortMode 属性指定的,该属性可以设置为以下的 DataGridViewColumnSortMode 枚举值之一. Da ...

  9. WPF DataGrid点击列头选择全列并具有背景色

    完成这个操作,主要是XAML的代码. 主要思路是通过绑定多路数据,在多路转换器中返回布尔值,在通过数据触发器来设置被选择的全列的背景色. XAML页面主要代码 首先定义DataGridCell < ...

  10. C# ListView点击列头进行排序

    /// <summary> /// This class is an implementation of the 'IComparer' interface. /// </summa ...

随机推荐

  1. ComfyUI 基础教程(五) —— 应用 IP-Adapter 实现图像风格迁移

    中秋假期,又可以玩玩 AI 了.前面介绍了 ComfyUI 的 Lora 模型以及 ControlNet,本文介绍另一个非常重要且使用的节点,IP-Adapter. 一. IP-Adapter 概念 ...

  2. 痞子衡嵌入式:MCUBootUtility v6.3发布,支持获取与解析启动日志

    -- 痞子衡维护的 NXP-MCUBootUtility 工具距离上一个大版本(v5.3.0)发布过去一年了,期间痞子衡也做过三个版本更新,但不足以单独介绍.这一次痞子衡为大家带来了全新重要版本v6. ...

  3. 反DDD模式之“复用”

    本文书接上回<反DDD模式之关系型数据库>,关注公众号(老肖想当外语大佬)获取信息: 最新文章更新: DDD框架源码(.NET.Java双平台): 加群畅聊,建模分析.技术实现交流: 视频 ...

  4. 系统编程-进程-当文件操作遇上fork

    我的关联博文: 系统编程-进程-fork深度理解.vfork简介 系统编程-进程-先后fork或open一个文件的区别 test1:   lseek基本使用 #include <stdio.h& ...

  5. mysql alter table修改表命令整理

    这篇文章主要介绍了mysql alter table修改表命令整理的相关资料,需要的朋友可以参考下   MYSQL ALTER TABLE命令用于修改表结构,例如添加/修改/删除字段.索引.主键等等, ...

  6. 【赵渝强老师】Docker Swarm实现服务的滚动更新

    一.什么是Docker Swarm? Docker Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机 ...

  7. NET Core 基础 - 删除字符串最后一个字符的七大类N种实现方式

    今天想通过和大家分享如何删除字符串最后一个字符的N种实现方法,来回顾一些基础知识点. 01.第一类.字符串方式 这类方法是通过string类型自身方法直接实现. 1.Substring方法 相信大多数 ...

  8. 动态去读 dll 文件

    // 反射动态读取 dll // Assembly assembly = Assembly.LoadFile(); 路径 // Assembly assembly = Assembly.LoadFro ...

  9. .Net Core 的 using 作用

    // using 的使用 // 1. 引用命名空间 using namespace // 2. 自动释放资源 执行结束自动调用 IDispose 接口释放资源 // using (var contex ...

  10. 05 Transformer 中的前馈神经网络(FFN)的实现

    2:20:理论链接 博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链 ...