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. Android -- FragmentTabHost实现微信底部切换

    1,在商城类的项目中我们开始一个项目的时候经常出现这样的需求,如下图所示: 下面使用户可以切换的模块,上面是对应的模块的详细内容,实现这个效果有很多方式,可以使用radiobutton+fragmen ...

  2. 夺命雷公狗---node.js---9实现页面的跳转

    废话不多说,我们先来看看项目的文件结构,如下所示: 然后我们创建一个index.js的文件让他来做端口监听,代码如下所示: var http = require('http'); var fs = r ...

  3. 好用的调色软件 ColorSchemer Studio

    软件名叫:ColorSchemer Studio 这是windows平台下的软件

  4. zw版【转发·台湾nvp系列Delphi例程】HALCON SetMshape

    zw版[转发·台湾nvp系列Delphi例程]HALCON SetMshape procedure TForm1.FormShow(Sender: TObject);var img : HImageX ...

  5. SSAS维度上有多个表的注意事项

    在Sql Server Analysis Service中维度上有多张表(大于一张表)时,一定要注意将第二张表开始用到维度属性中的KeyColumns下的NullProcessing要设置为Unkno ...

  6. jsp struts标签迭代各种数据

    首先创建一个User对象 User user=new User(); user.setUserName("张三"); user.setAge(30); User user1=new ...

  7. java基础整理1

    1.匿名对象:new persion().tell();这样的,它只开辟栈内存,没有栈引用的关系 2.构造方法的名称必须与类名称一致,构造方法的声明处不能有任何返回值类型的声明,不能在构造方法中使用r ...

  8. mysql开启远程访问

    1.MySql-Server 出于安全方面考虑只允许本机(localhost, 127.0.0.1)来连接访问. 这对于 Web-Server 与 MySql-Server 都在同一台服务器上的网站架 ...

  9. Gson将参数放入实体类中进行包装之后再传递

    package com.sinoservices.dms.orderinfo.entity; public class OrderDetailKeyCondition { //工单主键 private ...

  10. __ATTRIBUTE__ 你知多少?【转】

    转自:http://www.cnblogs.com/astwish/p/3460618.html GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属 ...