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

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

关于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

时间: 2024-07-31 14:08:02

DataTable排序(转)的相关文章

DataTable排序(来自其他空间)

DataTable排序 DataRow[] rows = dataTable1.Select("", "ord asc"); DataTable t = DataTable1.Clone(); t.Clear(); foreach (DataRow row in rows) t.ImportRow(row); DataTable1 = t; DataTable排序的一般方法 一.重生法 dstaset.Tables.Add(dt) dataset.Tables(0)

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

在C#中对Datatable排序,[DefaultView的Sort方法] 代码如下: DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("UserName", typeof(string)); dt.Rows.Add(new object[] { 1, "张飞" }); dt.Rows.Add(new object[] { 2,&q

C# Datatable排序

在C#中要对Datatable排序,可使用DefaultView的Sort方法.先获取Datatable的DefaultView,然后设置 得到的Dataview的sort属性,最后用视图的ToTable方法将排好序的dataview导出为Datatable.     代码如下:            DataTable dt = new DataTable();            dt.Columns.Add("ID", typeof(int));            dt.C

C#中DataTable排序

一.排序 1.获取DataTable的默认视图 2.对视图设置排序表达式 3.用排序后的视图导出的新DataTable替换就DataTable(Asc升序可省略,多列排序用","隔开) 代码如下: dv = New DataView(dt) dv.Sort = "id desc" dt = dv.ToTable();

C#之DataTable排序

DataTable dt = new DataTable(); dt.Columns.Add("a"); //..插入一些数据 //排序如下: DataView dv=new   DataView(dt); dv.Sort="a DESC"; dt = dt.ToTable();

关于DataTable排序

开发时客户提出一个需求,table要按指定列排序,在这边把一整套过程给大家说下, 1.首先你得确认ordering为true,这个属性是指DataTable可以排序, $('#example').dataTable( {  "ordering": true} ); 2.这时,点击表头th,这事灰访问Data table里定义的ajax获取值地址,谷歌浏览器,用f12调试,查看发起请求的参数 这三个个参数至关重要,在后台要进行取值. 3.在后台通过HttpServletRequest获取

DataTable排序

DataRow[] rows = dt.Select("", "name asc"); DataTable t = dt.Clone(); t.Clear(); foreach (DataRow row in rows)     t.ImportRow(row); DataTable1 = t; 方法2: DataView dv = dt.DefaultView; dv.Sort = "name Asc"; DataTable dt2 = dv.

datatable排序 方法

DataTable varTable = getexcel(excelpath);//datatable 数据 string expression;//筛选语句,用and分隔条件片断 string sortOrder;//排序语句 默认升ASC 降desc 用,分隔条件片断 expression = " deviceType<>'' AND deviceAddress<> '' AND dataType<>'' AND onErrorValue<>

对datatable操作经验-排序和分页

1.datatable排序1: public DataTable SortDesc(DataTable dt){ DataView dv = new DataView(); dv.Table = dt; dv.Sort = "autoid desc"; return dv.ToTable();} 2.datatable排序2 public DataTable SortDesc(DataTable dt){ dt.DefaultView.Sort = "ID ,Name ASC