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. 响应式框架pure--来自雅虎

    梦想还是要有  http://www.purecss.org/ 

  2. 夺命雷公狗---Thinkphp----15之遍历出来的栏目页的完成

    我们首页的写法和我们的文章页的代码很相似,我们要在点击我们的栏目页的时候遍历出对应的代码: 那么我们就直接来创建一个ListsController.class.php的文件,代码如下所示: 老规矩遍历 ...

  3. logging

    #coding=utf8 import sys, logging   logging.basicConfig(level=logging.INFO,                     forma ...

  4. 记linux下使用create_ap 创建热点失败及解决(涉及rfkill)

    先介绍一下 create_ap. 这是一个在linux中创建热点用的脚本, 托管在github中, https://github.com/oblique/create_ap/ 正文开始: 习惯了win ...

  5. c语言对文件操作完成后尽量手动关闭

    是这样的,我写了一个函数,传给函数文件名,在函数中对文件写入一些内容.在这个函数的后面没有手动使用 fclose. 当在程序中对这个函数调用两次之后,最终把要写入的文件写错了. 在第二次使用 fope ...

  6. HorizontalScrollView的配置

    package com.exmple.jinritoutiao; import java.util.ArrayList;import java.util.Calendar;import java.ut ...

  7. myeclipse启动报错 no java virtual machine。。。

    如果环境变量里已经配置了JAVA_HOME,但是在启动的时候还会提示下面的信息:   A Java Runtime Environment (JRE) or Java Development Kit ...

  8. 在ECSHOP后台的订单列表中显示配送方式

    熟悉ECSHOP后台的人都知道,只有点击某个具体的订单,进入订单详细页面才能看到该订单的配送方式,最模板修改的目的,是想让管理者在订单列表页面 就能看到该订单的配送方式. 下面是修改方法:首先来修改 ...

  9. String 类的常用字符串方法

    public class Page106 { /** * 字符串练习第五章 * @param args */ public static void main(String[] args) { Stri ...

  10. Spring MVC 的汉字乱码问题

    在web.xml文件加入 <filter> <filter-name>characterEncodingFilter</filter-name> <filte ...