DataTable 排序

 
DataRow[] rows = dataTable1.Select("", "ord asc");
 
DataTable t = DataTable1.Clone();
 
t.Clear();
 
foreach (DataRow row in rows)
 
    t.ImportRow(row);
 
DataTable1 = t;
 
VS2005中这种方法最简单:
DataView dv = dt.DefaultView;
dv.Sort = "c1 Asc";
DataTable dt2 = dv.ToTable();
 
--------------------------
 
//拿到数据源
DataView dv = this.dtDataSource.Copy().DefaultView;
//排序
dv.Sort = "款 asc,項 asc,目 asc";
//过滤重复数据
//DataTable dt = dv.ToTable(true, "款", "項", "目");
//不过滤重复数据
DataTable dt = dv.Table.Copy();  
 
-----------------------------------------------
 
关于DataView(DataTable)排序的思考
       因项目需要,在获得<a target="_blank" style="color: #0000F0; display:inline; position:static; background:none;" href="http://www.so.com/s?q=dataset&ie=utf-8&src=se_lighten_f">dataset</a>(或者DataTable)之后要对该table进行重新排序,排序规则按照<a target="_blank" style="color: #0000F0; display:inline; position:static; background:none;" href="http://www.so.com/s?q=%E6%95%B0%E7%BB%84&ie=utf-8&src=se_lighten_f">数组</a>fids元素的顺序进行。
 
在测试的时候,我用简单的思考方法,在table上增加一列dis,来存放该行的主键在fids中的对应项的索引,一个循环之后,dis都被赋了值,现在就要排序了,因为datatable没有排序功能,就选择了转换DataTable为DataView,然后对DataView进行排序,关键代码如下:
 
DataView dw = dt.DefaultView;
 
dw.Sort = "dis,发布日期 desc";
 
然后把dw绑定到DataGird输出,结果正好符合原意。
 
可是具体使用中却出了问题,因为我对dw又进行了一次处理,取该分页需要的某几项绑定到DataGird,于是结果和排序之前一样,没有了变化。
 
究其原因,才发现,这里的DataView只是设定了排序规则,并没有实施排序,那么排序在什么时候发生呢,应该是在绑定到DataGird的时候才发生,所以我后来的方法就出了问题。
 
总结如下:DataView的筛选和排序功能都是在绑定到数据控件的时候才执行的,如果你是简单的需求(也就是说不需要再取其中的部分数据来绑定数据控件),那就可以使用该功能。
 
我的问题的最终解决方法如下(只使用了简单的循环):
 
private DataTable SortTable(DataTable dt,string[] pids)
 
         {
 
              DataTable dt0 = dt.Clone(); //复制原表结构
 
              for(int i=0;i<pids.Length;i++)
 
              {
 
                   if(pids[i] != string.Empty)
 
                   {
 
                       DataRow[] drs = dt.Select("pos_id=" + pids[i]);
 
                       if(drs.Length > 0)
 
                       {
 
                            foreach(DataRow dr in drs)
 
                            {
 
                                 dt0.ImportRow(dr); //导入行
 
                            }
 
                       }
 
                   }
 
              }
 
              return dt0;
 
     }
 
说明:就是对排序的数组循环,在datatable中找对应的行,然后复制到新表中。
 
 
该方法的效率还是可以的,不过如果交集次数大于20,000,000的时候,就会有效率问题。
 
****************************************************************
 
  
 
dstaset.Tables.Add(dt)
dataset.Tables(0).DefaultView.Sort = "id desc"
 
dv = New DataView(dt)
dv.Sort = "id desc"
 
dv = New DataView(ds.Tables[0])
dv.Sort = "id desc"-------------------------------------------------------------- System.Data.DataTable table = new System.Data.DataTable();
            table.Columns.Add("aa", typeof(string));
            System.Data.DataRow row = table.NewRow();
            row["aa"] = "sdf";
            table.Rows.Add(row);
 
            System.Data.DataView dv = new System.Data.DataView(table);
 
            table.Columns.Add("bb", typeof(string)); DataTable dt = con.getDGResulthk(sql);
            DataColumn col1 = con.getCol(sql1);
            DataColumn col = dt.Columns.Add("工资");
            DataRow dr = dt.NewRow();
            dr["工资"] = col1;
            dt.Rows.Add(dr);
            dataGridView1.DataSource = dt;
             
            dataGridView1.AutoResizeColumns();
 System.Data.DataTable table = new System.Data.DataTable();
            table.Columns.Add("aa", typeof(string));
            System.Data.DataRow row = table.NewRow();
            row["aa"] = "sdf";
            table.Rows.Add(row);
 
            System.Data.DataView dv = new System.Data.DataView(table);
 
  
 
  
 
DataTable drReport=new DataTable();
 
DataRow[] pdrs111 = dtReport.Select("code=''" + strNoCode + "''");
                        if (pdrs111.Length > 0)
                        {
                            foreach (DataRow dr111 in pdrs111)
                            {
                                decfd_1 = Convert.ToDouble(dr111["fd"].ToString());
                                dr111["fd_no"] = dtNOValue;
                                dr111["fd_no_toal"] = decfd_1 + dtNOValue;
                            }
                        }
 
 
 
  
 
  
 
dstaset.Tables.Add(dt)
dataset.Tables(0).DefaultView.Sort = "id desc"
 
dv = New DataView(ds.Tables[0])
dv.Sort = "id desc"
 
from: http://www.cnblogs.com/xiaofengfeng/archive/2012/06/27/2565941.html

DataTable排序(转)的更多相关文章

  1. C# dataTable 排序

    DataView dv = ds.DefaultView; dv.Sort = "header asc"; ds = dv.ToTable(); C# dataTable 排序

  2. C# Datatable排序

    在C#中要对Datatable排序,可使用DefaultView的Sort方法.先获取Datatable的DefaultView,然后设置 得到的Dataview的sort属性,最后用视图的ToTab ...

  3. C# 对Datatable排序

    一,在C#中要对Datatable排序,可使用DefaultView的Sort方法.先获取Datatable的DefaultView,然后设置 得到的Dataview的sort属性,最后用视图的ToT ...

  4. [DataTable]控件排序事件中用DataView及DataTable排序

    控件排序事件中用DataView及DataTable排序 文章分类:.net编程 在做ASP.NET页面开发时,经常要用到dataset(或者DataTable),绑定到DataGrid或GridVi ...

  5. 在C#中对Datatable排序【DefaultView的Sort方法】

    在C#中对Datatable排序,[DefaultView的Sort方法] 代码如下: DataTable dt = new DataTable(); dt.Columns.Add("ID& ...

  6. DataTable排序(来自其他空间)

    DataTable排序 DataRow[] rows = dataTable1.Select("", "ord asc"); DataTable t = Dat ...

  7. C# Datatable排序(转)

    C# Datatable排序 在C#中要对Datatable排序,可使用DefaultView的Sort方法.先获取Datatable的DefaultView,然后设置得到的Dataview的sort ...

  8. 【转】C# Datatable排序与取前几行数据

    转自:http://www.cnblogs.com/linyechengwei/archive/2010/06/14/1758337.html http://blog.csdn.net/smartsm ...

  9. DataSet,DataTable排序(转载)

    DataSet,DataTable排序   关于对已经绑定的DataSet的排序的问题: DataSet ds=new DataSet();DataView dv=new DataView();dv. ...

随机推荐

  1. iOS开发拓展篇—静态库

    iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...

  2. Linux diable ipv6

    在RHEL 5下面测试成功     linux下面禁止ipv6的方法: 来自: 杨志刚 博客 (http://yangzhigang.cublog.cn)   这里我所做的是Redhat Linux, ...

  3. Mike的农场 (BZOJ 4177)

    题目大意: 给N个东西分AB类,分到A类和B类分别得到相应的钱记为A[i],B[i],然后有一些冲突关系<x,y,z>,如果物品x,y不同类需要付出z的钱.还有一些外快<S,x,y& ...

  4. Appium移动自动化测试(一)--安装Appium

    Appium 自动化测试是很早之前就想学习和研究的技术了,可是一直抽不出一块完整的时间来做这件事儿.现在终于有了. 反观各种互联网的招聘移动测试成了主流,如果再不去学习移动自动化测试技术将会被淘汰. ...

  5. Maven配置中scope说明

    Maven环境搭建完成后,需要去pom.xml文件中配置相关使用的jar架包. 如上图,架包选定之后需要配置对应的scope属性,下面来简单说下这些属性选项的含义: 1. compile,缺省值,适用 ...

  6. IE下只读INPUT键入BACKSPACE 后退问题(readonly='true')

    在IE下,如果在readonly的input里面键入backspace键,会触发history.back(), 用以下jquery代码修正之 $("input[readOnly]" ...

  7. 使用UISegmentedControl的一个注意事项

    NSArray* array = [[NSArray alloc]initWithObjects:@"机会",@"联系人", nil]; //先确定segmen ...

  8. bcopy函数

    函数原型:void bcopy(const  void  *src,  void  *dest,  int  n) 头文件:#include <string.h> 函数功能:将src指针指 ...

  9. 64位 ubuntu android studio gradle 权限不够 缺少文件和权限导致

    安装 32位  库文件 sudo apt-get install lib32z1 给文件夹加权限 chmod 777 -R SDK chmod 777 -R android-studio -R表示所有 ...

  10. 判断CAD图纸版本

    判断CAD图纸版本Dwg文件版本 使用记事本打开DWG图纸文件,在最开始有6个字母和数字组合,即为图纸的版本号 AC1015:CAD2000版本: AC1018:CAD2004版本: AC1021:C ...