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实现点击列头升序和降序排序

二、使用编程的方式实现自定义排序

可以以编程方式按任一列或多列中的值对 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

标签:DataGridView,点击,列头,排序
0
投稿

猜你喜欢

  • Spring集成Quartz的简单配置的方法

    2023-08-24 02:52:27
  • Eclipse插件大全 挑选最牛的TOP30(全)

    2023-06-29 09:34:50
  • MyBatis resultMap id标签的错误使用方式

    2022-02-01 05:25:37
  • java爬取豆瓣电影示例解析

    2023-09-17 22:45:02
  • 深入了解C#设计模式之订阅发布模式

    2021-08-14 05:31:39
  • 使用JMF实现java视频播放器

    2022-12-26 00:28:25
  • AJAX中Get请求报错404的原因以及解决办法

    2021-07-03 05:41:07
  • Java中lock和tryLock及lockInterruptibly的区别

    2023-05-27 11:33:56
  • Android编程ProgressBar自定义样式之动画模式实现方法

    2022-02-10 12:54:29
  • Java并发编程之阻塞队列详解

    2022-06-20 02:08:19
  • 老生常谈Java String字符串(必看篇)

    2023-06-20 19:56:20
  • Java全面细致讲解==和equals的使用

    2021-08-20 05:28:43
  • springboot中bean的加载顺序问题

    2022-01-04 19:55:57
  • C#实现洗牌游戏实例

    2021-07-07 00:45:29
  • Java深入讲解instanceof关键字的使用

    2023-02-27 13:05:05
  • jdbc与druid连接池的使用详解

    2023-09-18 17:50:11
  • SpringMVC域对象共享数据示例详解

    2023-03-10 22:21:21
  • 解决Maven项目中 Invalid bound statement 无效的绑定问题

    2021-08-13 10:30:41
  • C#堆排序实现方法

    2022-03-17 02:48:46
  • 详解Java线程池队列中的延迟队列DelayQueue

    2023-08-30 01:22:04
  • asp之家 软件编程 m.aspxhome.com