DataGridView实现点击列头升序和降序排序
作者:.NET开发菜鸟 发布时间:2022-07-31 21:54:01
DataGridView 列有三种排序模式。每一列的排序模式是通过该列的 SortMode 属性指定的,该属性可以设置为以下的 DataGridViewColumnSortMode 枚举值之一。
DataGridViewColumnSortMode 值说明:
Automatic
文本框列的默认排序模式。除非将列标头用于选择,否则单击列标头将自动按此列对 DataGridView 排序,并显示一个指示排序顺序的标志符号(向上的三角箭头:升序排序;向下的三角箭头:降序排序)。NotSortable
非文本框列的默认排序模式。可以以编程方式对此列排序;但此列不适合排序,因此未为排序标志符号保留空间。Programmatic
可以以编程方式对此列排序;而且为排序标志符号保留了空间。
一、使用SortMode属性自动排序
1、通过程序设置
private void FrmMain_Load(object sender, EventArgs e)
{
foreach (DataGridViewColumn column in this.dgv_Users.Columns)
{
//设置自动排序
column.SortMode = DataGridViewColumnSortMode.Automatic;
}
}
2、在设计界面修改属性
二、使用编程的方式实现自定义排序
可以以编程方式按任一列或多列中的值对 DataGridView 排序,而不论 SortMode 设置如何。当希望为排序提供自己的用户界面 (UI) 时,或者当希望实现自定义排序时,以编程方式排序很有用。提供自己的排序用户界面非常有用,例如,在设置 DataGridView 选择模 式以启用列标头选择时。在这种情况下,虽然列标头不能用于排序,但是仍希望标头显示相应的排序标志符号,因此将 SortMode 属性设置为 Programmatic。
设置为编程排序模式的列不会自动显示排序标志符号。对于这些列,必须通过设置 System.Windows.Forms.DataGridViewColumnHeaderCell.SortGlyphDirection 属性 来手动显示标志符号。为了在自定义排序中能够灵活操作,这是必需的。例如,如果按多列对 DataGridView 排序,则可能希望显示多个排序标志符 号或不显示任何标志符号。
对于已排序的 DataGridView,可以通过检查 SortedColumn 和 SortOrder 属性的值确定排序列和排序顺序。
如果SortMode的属性设置为Programmatic就需要使用编程的方式在ColumnHeaderMouseClick事件中实现自定义排序。
示例:
private void dgv_Users_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
DataGridView dgv = sender as DataGridView;
if (dgv.Columns[e.ColumnIndex].SortMode == DataGridViewColumnSortMode.Programmatic)
{
string columnBindingName = dgv.Columns[e.ColumnIndex].DataPropertyName;
switch (dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection)
{
case System.Windows.Forms.SortOrder.None:
case System.Windows.Forms.SortOrder.Ascending:
CustomSort(columnBindingName, "desc");
dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Descending;
break;
case System.Windows.Forms.SortOrder.Descending:
CustomSort(columnBindingName, "asc");
dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;
break;
}
}
}
/// <summary>
/// 自定义排序
/// </summary>
/// <param name="columnName">绑定的字段名</param>
/// <param name="sortMode">排序方式 asc 升序 desc 降序</param>
private void CustomSort(string columnBindingName, string sortMode)
{
DataTable dt = this.dgv_Users.DataSource as DataTable;
DataView dv = dt.DefaultView;
dv.Sort = columnBindingName + " " + sortMode;
this.dgv_Users.DataSource = dv.ToTable();
this.dgv_Users.Refresh();
}
来源:https://www.cnblogs.com/dotnet261010/p/6828380.html
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 前端模板框架为Bootstrap,系统分为前台和后台。后台主要为管理员角色,功能有:商品类型管理、商品管理、订单管理、会员管理、管理员管理等
- 在本文中,我们将看到如何将double转换为int。在Java编程中,您将有一个double原语值(例如82.14),但是要执行进一步的操作
- 一、deleteById 和 delete为什么要把这两个方法放在一起呢?我们先看源码再说deleteById(Id id)(通过id进行删
- 之前已经为大家介绍过利用Java实现带GUI的气泡诗词特效,本文将为大家介绍另一种方法同样也可以实现气泡诗词的效果。下面是示例代码impor
- 本文实例讲述了Android编程使用pull方式解析xml格式文件的方法。分享给大家供大家参考,具体如下:上次已经说过使用Android s
- Profile多环境配置我们在开发项目时,通常同一套程序会被发布到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、red
- java中的复杂查询sql语句实现:这样的查询栏,在页面中很常见,这就是复杂查询的条件,我们可以填写一个条件或多个条件,也可以一个都不填写,
- 最近接触了Android自定义控件,涉及到自定义xml中得属性(attribute),其实也很简单,但是写着写着,发现代码不完美了,就是在a
- Remote Debug 综述当我们的后台项目部署到服务器上时,由于环境和本地不同,有时候也会有一些奇奇怪怪的问题出现。只依赖服务器上的日志
- 在Eclipse中创建Android项目,利用之前学过的WebView控件和中国天气网提供的天气数据接口,实现获取指定城市的天气预报。布局文
- 最近的项目中要实现一个聊天的功能,类似于斗鱼TV的聊天室功能,与服务器端人商量后决定用WebSocket来做,但是在这之前我只知道Socke
- 继承反应了类和类之间的关系。世界上很多事物都是有共性的,共性的那一部分我们就抽象为基类,用于派生其它类,这样提高了代码的复用性,使得代码的结
- 一、项目需求二、项目思路1、菜单制作2、中奖号码生成 getNumber (随机数 Math.random)3、购买号码和中奖号码比对 生成
- 一、项目简述功能包括: 用户登录,设备管理,设备指派,贝附信息,信息公告, 信息维护,系统管理,图表统计等等功能。二、项目运行环境配置: J
- 前言 之前unity5.x在代码中写了debug.log..等等,打
- 本文实例为大家分享了Android自定义View实现简易画板的具体代码,供大家参考,具体内容如下自定义VIew实现简易画板效果,功能包括清空
- 笔者在网上发现了,很多种方法 ,当然咱们找最好用的,也简单的 下面废话不多说直接上代码 我在啰嗦几句 第一这个脚本挂在需要相应的游戏体上 第
- 异常是程序运行中发生的错误,异常处理是程序设计的一部分。错误的出现并不总是编写应用程序者的原因,有时候应用程序会因为终端用户的操作发生错误。
- 1. 内部类很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了1.1 内部类概述内部类就是在一
- 值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容