DataTable排序

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

-----------------------------------------------

       因项目需要,在获得dataset(或者DataTable)之后要对该table进行重新排序,排序规则按照数组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中找对应的行,然后复制到新表中。

该方法的效率还是可以的,不过如果交集次数大于20000000的时候,就会有效率问题。

****************************************************************

 

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"

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值