1,将需要进行排序的列做属性的设置

this.colUserName.SortMode = DataGridViewColumnSortMode.Programmatic;

2,添加列的事件

//点击列头进行排序
private void dgv_NoSignalSelect_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
int nColumnIndex = e.ColumnIndex;

if (dgv_NoSignalSelect.Columns[nColumnIndex].SortMode != DataGridViewColumnSortMode.Programmatic)
{
return;
}
switch (dgv_NoSignalSelect.Columns[nColumnIndex].HeaderCell.SortGlyphDirection)
{
case SortOrder.None:
case SortOrder.Ascending:
//在这里加入排序的逻辑
OrderTableOgDgv(nColumnIndex, "asc");
//设置列标题的状体
dgv_NoSignalSelect.Columns[nColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.Descending;
break;
default:
//在这里加入排序的逻辑
OrderTableOgDgv(nColumnIndex, "desc");
//设置列标题的状体
dgv_NoSignalSelect.Columns[nColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
break;
}

}

3,下面是上面应用到的排序算法

/// <summary>
/// 给dgv_NoSignalSelect按列排序
/// </summary>
/// <param name="nColumnIndex"></param>
/// <param name="orderCmd"></param>
private void OrderTableOgDgv(int nColumnIndex, string orderCmd)
{
DataTableEx dtex = this.dgv_NoSignalSelect.SourceDataTable;
dtex = UserQueueServer.OrderTable(dtex, dgv_NoSignalSelect.Columns[nColumnIndex].Name, orderCmd);
this.dgv_NoSignalSelect.SourceDataTable = dtex;
this.dgv_NoSignalSelect.Refresh();
}

public Class UserQueueServer{

/// <summary>
/// 对DataTable排序
/// </summary>
/// <param name="dt">DataTableEx</param>
/// <param name="columnname">排序的列名称</param>
/// <param tyoe="type">排序类型 "desc"-降序 "asc"-升序</param>
/// <returns></returns>
public static DataTableEx OrderTable(DataTableEx dt, string columnname,string type)
{
DataTable ds = dt.Clone();
ds.Clear();
if (dt.Columns.Contains(columnname))
{
DataRow[] drs = dt.Select("1=1", columnname + " "+ type);
foreach (DataRow dr in drs)
{
ds.Rows.Add(dr.ItemArray);
}
}
return ds as DataTableEx;
}

}

DataGridView的自定义列排序的更多相关文章

  1. EasyUI扩展——自定义列排序匹配字段

    一些特殊情况下希望实现:单击某些列,但是排序要按照自定义指定另外的列排序 easyui扩展: 如果不写sort属性则按照默认该列的field排序 $.fn.datagrid.defaults.onBe ...

  2. DataGridView 列排序 内存表查找

    DataRow[] drow = dt.Select("列名 = 列名的值" ); 就这句话,dt是一个datatable 且断点调试时能看到里面有trade这个列,可为什么执行到 ...

  3. datagridview 日期列排序

    1.datagridview 日期列排序 private void Form1_Load(object sender, EventArgs e) { //方法1 dataGridView1.Colum ...

  4. (转)datagridview 自定义列三步走

    本文转载自:http://blog.csdn.net/zx13525079024/article/details/4814642 我们如果想自定义实现datagridview的某列,例如是datagr ...

  5. 自定义多列排序:C++/Java实现

    前言: 有些时候,我们在编程中会遇到多列排序的需求.假如在execle,这事儿就太easy了.不过没办法,现在就需要你用Java或者C++实现这样一个功能! 比如将下表无序的数据通过重排之后按照以下规 ...

  6. Jtable 表格按多列排序(支持中文汉字排序)

    这两天公司让做一个Jtable表格的排序,首先按A列排序,在A列相等时按B列排序,B列相等时按C列排序,ABC三列可以任意指定,最多分三列,这样的一个需求.由于我是大神,所以必须做了出来.ok,不自恋 ...

  7. 禁用datagridview中的自动排序功能

    把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...

  8. ORACLE自定义顺序排序-转

    ORACLE可以借助DECODE函数,自定义顺序排序: select * from ( select 'Nick' as item from dual union all select 'Viki' ...

  9. Dos.ORM Select查询 自定义列

    自定义列 .Select( p = >new{ test = p.id}) // 同sql 列名 as 新列名 如下是 自己在写代码的例子,查询,分页,where条件,排序 var where ...

随机推荐

  1. Redis和Memcache对比及选择

    没有必要过多的关注性能.由于Redis只使用单核,而Memcached可以使用多核, 所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高.而在100k以上的数据中,Mem ...

  2. 帮初学者改代码——playerc之“练习:求完数问题”(上)

    原文:“练习:求完数问题” 原代码: // #include <stdio.h> #include <stdlib.h> #include <math.h> #de ...

  3. windbg定位WEB性能瓶颈案例一则

    测试环境 服务器:II服务器 网站:门户网站 条件 并发: 2000 LoadRunner思考时间:1s 表现 CPU:100% 对应w3wp进程 WebService–>Current con ...

  4. 161031、java.util.StringTokenizer使用及源码

    import java.util.StringTokenizer; public class TestStringTokenizer { public static void main(String[ ...

  5. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.4.Tabs控件

    之前,我们已经介绍了 jQuery UI 库,CSS 框架.下面,我们将学习这些有增强可视化效果,高度可配置的用户交互组件. Tab 的特性是,点击 tab 后,会高亮该 tab,并显示他的关联con ...

  6. PL/SQL显示行号和高亮当前行

    PL/SQL Developer 如何显示行号: PL/SQL Developer 高亮当前行: OK!

  7. Hibernate,JPA注解@DynamicInsert和@DynamicUpdate,Hibernate如何插入sysdate

    @DynamicInsert属性:设置为true,设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false. ...

  8. jq 动态判断设备添加对应meta viewport属性内同

    1.常见的单位 dip, dp, px, sp之间的区别: dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支 ...

  9. python: hashlib 加密模块

    加密模块hashlib import hashlib m=hashlib.md5() m.update(b'hello') print(m.hexdigest()) #十六进制加密 m.update( ...

  10. android的充电图标显示

    最近RK3026的项目需要修改开机充电,才分析了Android原生态的充电过程. 充电的代码和图标在system/core/charger中,会编译成名字为charger的可执行文件,打包进ramdi ...