zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    redis安装及简单命令
    struts2 第二天
    初学struts2-入门案列
    hibernate第二天
    hibernate入门
    同义词,索引,表分区
    表空间,序列
    orcale函数
    orcale错题分析
    orcale开篇
  • 原文地址:https://www.cnblogs.com/dotnet261010/p/6828380.html
Copyright © 2011-2022 走看看