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();
}

最新文章

  1. 关于android的@TargetApi和@SuppressLint(&quot;NewApi&quot;)
  2. QTP对象识别tips
  3. combobox获取值
  4. Smart ECM数据发布假数据测试工作。
  5. 理解Socket编程【转载】
  6. CodeForces Round #301 Div.2
  7. hdu 1879 继续畅通工程
  8. Android 内核初识(1)下载源码需求与教程
  9. REST API之前端跨域访问
  10. C/C++中的常成员函数
  11. 利用 XPath-jQuery 集锦手册在 XPath 和 jQuery 之间做选择
  12. Codeforces 704A Thor 队列模拟
  13. Git时光机穿梭之删除文件
  14. Visual Studio 2013怎么关闭智能提示?
  15. BeautifulSoup 抓取网站url
  16. 大型网站架构演进(6)使用NoSQL和搜索引擎
  17. hive sql 里面的注释方式
  18. Windows-universal-samples学习笔记系列二:Controls, layout, and text
  19. 浅谈js设计模式之发布 — 订阅模式
  20. [LeetCode]460.LFU缓存机制

热门文章

  1. struts2 xml配置文件配置传参数
  2. Device trees, Overlays and Parameters of Raspberry Pi
  3. 《JAVA与模式》之状态模式
  4. RHCE7 管理II-5管理进程的优先级
  5. ssh/scp 远程连接ssh非默认端口方法
  6. Python log() 函数
  7. ubuntu 16.04 apt-get 更新使用中科大镜像源
  8. 2015小米暑期实习笔试题_风口的猪-中国牛市(dp)
  9. [na]vrrp两用(网关冗余+服务器热备)
  10. 【Android】3.9 覆盖物功能