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

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事件中实现自定义排序。

示例:

 1 private void dgv_Users_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
 2 {
 4      DataGridView dgv = sender as DataGridView;
 5      if (dgv.Columns[e.ColumnIndex].SortMode == DataGridViewColumnSortMode.Programmatic)
 6      {
 7          string columnBindingName = dgv.Columns[e.ColumnIndex].DataPropertyName;
 8          switch (dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection)
 9          {
10             case System.Windows.Forms.SortOrder.None:
11             case System.Windows.Forms.SortOrder.Ascending:
12                    CustomSort(columnBindingName, "desc");
13                    dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Descending;
14                    break;
15             case System.Windows.Forms.SortOrder.Descending:
16                    CustomSort(columnBindingName, "asc");
17                    dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;
18                    break;
19             }
20        }
21 }
22
23 /// <summary>
24 /// 自定义排序
25 /// </summary>
26 /// <param name="columnName">绑定的字段名</param>
27 /// <param name="sortMode">排序方式 asc 升序 desc 降序</param>
28 private void CustomSort(string columnBindingName, string sortMode)
29 {
30       DataTable dt = this.dgv_Users.DataSource as DataTable;
31       DataView dv = dt.DefaultView;
32       dv.Sort = columnBindingName + " " + sortMode;
33       this.dgv_Users.DataSource = dv.ToTable();
34       this.dgv_Users.Refresh();
35 }
时间: 2024-10-09 21:41:22

DataGridView使用技巧十三:点击列头实现升序和降序排序的相关文章

HTML中实现Table表头点击升序/降序排序

1 题目:如下图,请实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序. 2 姓名 力量 敏捷 智力 3 德鲁伊王 17 24 13 4 月之骑士 15 22 16 5 众神之王 19 15 20 6 流浪剑客 23 15 14 7 基本思路: 8 点击将各列数值存入数组第一次点击?(className=="as"?)升序排序(className="desc")按新排列的数组的顺序,将各列赋予新值

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

说明: SetItemData可以为每一行绑定一个DWORD类型的变量.用GetItemData可以获得这个变量.举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID,一般这个ID值本身没有什么意义,用户也不需要看,因此在CListCtrl的可见列中,你不需要显示.但往往做具体查询等操作时,你又需要用这个ID来完成.这时,用SetItemData将其绑定到每一行,将非常方便,用户操作哪一行,则用GetItemData可以得到对应记录的ID,直接用来做操作,很爽.

DataGridView使用技巧六:冻结列或行

一.冻结列 DataGridViewColumn.Frozen属性为true时,该列左侧的所有列被固定,横向滚动时固定列不随滚动条滚动而左右移动.这对于重要列固定很有用. 示例:通过程序固定左侧第二列 1 //固定第二列 2 this.dgv_PropDemo.Columns[1].Frozen = true; 2.通过设计界面固定列 选择编辑列 选择要冻结的列,将Frozen属性勾选 二.冻结行 DataGridViewRow.Frozen属性为true时,该行上面的所有行被固定,纵向滚动时固

Winfrom DataGridView添加列头checkbox

using System; using System.Data; using System.Drawing; using System.Windows.Forms; using Yanwen.Logistics.Business.Logics; using Yanwen.Logistics.Business.Models.ExpressTransport; using Yanwen.Logistics.Desktop.Extensions; namespace Yanwen.Logistics.

DataGridView使用技巧九:DataGridView的右键菜单(ContextMenuStrip)

DataGridView,DataGridViewColumn,DataGridViewRow,DataGridViewCell有ContextMenuStrip属性.可以通过设置ContextMenuStrip对象来控制DataGridView的右键菜单的显示. DataGridViewColumn的ContextMenuStrip属性设定除了列头以外的单元格的右键菜单. DataGridViewRow的ContextMenuStrip属性设定除了行头以外的单元格的右键菜单. DataGrid

点击表头,实现表格内容的规则排序

描述:实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序. 如图所示:  姓名  力量  敏捷  智力  赵  17  34  13  钱  15  22  16  孙  19  15  20  李  23  15  15 接下来,首先绘制该表格, 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"/>

DataGridView使用技巧七:列顺序的调整、操作行头列头的标题

一.列顺序的调整 设定DataGridView的AllowUserToOrderColumns为True的时候,用户可以自由调整列的顺序. 当用户改变列的顺序的时候,其本身的Index不好改变,但是DisplayIndex改变了.也可以通过程序改变DisplayIndex来改变列的顺序.列顺序发生改变时会引发ColumnDisplayIndexChanged事件. 二.行头和列头 改变DataGridView的第一列列头内容: 1 this.dgv_PropDemo.Columns[0].Hea

[WinForm]DataGridView列头右键菜单

[WinForm]DataGridView列头右键菜单 前言 继续"不误正业" - - #,记录一下.有时候有这样的需求:DataGridView的列头菜单可以选择具体显示哪些列,而数据区域的菜单显示增删改查,这样就需要设置两个菜单了,而DataGridView并没有为列头设置菜单的选项,这里分享一段代码. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 一.拖拽一个

datagridview 点击列标题排序

开发winform中,平时经常用到数据列表,我们大多选用datagridview,但是此控件本身没有排序的功能.参阅网上资料.留下标记,以后备用. datagridview的数据显示一般是通过数据绑定来实现, 即:this.datagridview.DataSource=this.bindingSrc; this.bindingSrc.DataSource=this.Model; 这种形式就完成了,数据的显示过程.但是要实现点击datagridview实现排序的功能,需要实现对数据源排序的功能.