最近喜欢用上了DataTable对数据的处理,感觉DataTable很强大。。。不用再在查询语句中进行处理sql语句。呵呵。这就懒人的好出,
好了废话不多说。还是把我我最近用到关于DataTable的排序功能贴出来,方便自己,也方便其他同学使用:
public void getDataRow(DataTable dt, ref DataRow[] dr)
{
//这就是排序,并过滤DataTable。DataTable的select过滤同学们不陌生吧
//前一个是过滤字段,后面是排序字段(这儿可以升序和降序排序默认asc)
DataRow[] rows = dt.Select("", "orderColumns Asc");
//这个是克隆原来的DataTable
DataTable tempDataTable = dt.Clone();
//清空不用说了吧
tempDataTable.Clear();
//把排好序的datarow要用导入行的方式,DataTable.ImportRow(DataRow)
foreach (DataRow row in rows)
tempDataTable.ImportRow(row);
//把排好序的DataTable赋值给自己以前的DataTable覆盖
dt = tempDataTable;
//呵呵这个是我在项目中使用到的。我的需求是要先排序再过滤,
// dr = dt.Select( "Columns=filterColumns" );
}
好了这个方法写好了。返回的是一个DataRow。当然你也可这样实现它:
public void getDataRow(DataTable dt, ref DataRow[] dr)
{
//一行代码就搞定。
dr = dt.Select("Columns=filterColumns", "orderColumns Asc");
}
下面试我在网上搜到的其他方式。可以借鉴一下。。。
一、重生法
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"
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 = "Columns1 asc,Columns2 asc,Columns3 asc";
//过滤重复数据
//DataTable dt = dv.ToTable(true, "Columns1", "Columns2", "Columns3");
//不过滤重复数据
DataTable dt = dv.Table.Copy();