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"
DataTable排序(转)的更多相关文章
- C# dataTable 排序
DataView dv = ds.DefaultView; dv.Sort = "header asc"; ds = dv.ToTable(); C# dataTable 排序
- C# Datatable排序
在C#中要对Datatable排序,可使用DefaultView的Sort方法.先获取Datatable的DefaultView,然后设置 得到的Dataview的sort属性,最后用视图的ToTab ...
- C# 对Datatable排序
一,在C#中要对Datatable排序,可使用DefaultView的Sort方法.先获取Datatable的DefaultView,然后设置 得到的Dataview的sort属性,最后用视图的ToT ...
- [DataTable]控件排序事件中用DataView及DataTable排序
控件排序事件中用DataView及DataTable排序 文章分类:.net编程 在做ASP.NET页面开发时,经常要用到dataset(或者DataTable),绑定到DataGrid或GridVi ...
- 在C#中对Datatable排序【DefaultView的Sort方法】
在C#中对Datatable排序,[DefaultView的Sort方法] 代码如下: DataTable dt = new DataTable(); dt.Columns.Add("ID& ...
- DataTable排序(来自其他空间)
DataTable排序 DataRow[] rows = dataTable1.Select("", "ord asc"); DataTable t = Dat ...
- C# Datatable排序(转)
C# Datatable排序 在C#中要对Datatable排序,可使用DefaultView的Sort方法.先获取Datatable的DefaultView,然后设置得到的Dataview的sort ...
- 【转】C# Datatable排序与取前几行数据
转自:http://www.cnblogs.com/linyechengwei/archive/2010/06/14/1758337.html http://blog.csdn.net/smartsm ...
- DataSet,DataTable排序(转载)
DataSet,DataTable排序 关于对已经绑定的DataSet的排序的问题: DataSet ds=new DataSet();DataView dv=new DataView();dv. ...
随机推荐
- 使用实时文件夹显示ContentProvider的数据
所谓实时文件夹(即LiveFolder),是指用于显示ContentProvider提供的数据的桌面组件. ContentProvider用于向外提供数据访问的接口,一个应用程序可通过ContentP ...
- 总结七条助你成为Linux高手的超棒忠告
起初Linux对于我来说其实是很纠结的,因为很早以前就听说过.也曾见各种技术大牛使用过,但是一直觉得非常高深而没有去正式接触.两年前随着自己工作愈发的乏味,又看到了一篇叫做"虽然我是医生,但 ...
- hdoj 3501
Problem Description Given a positive integer N, your task is to calculate the sum of the positive in ...
- 优雅的处理Android数据库升级的问题
原始完成于:2015-04-27 19:28:22 提供一种思路,优雅的处理Android数据库升级的问题,直接上代码: 1 package com.example.databaseissuetest ...
- python3批量删除豆瓣分组下的好友
python3批量删除豆瓣分组下的好友 """ python3批量删除豆瓣分组下的好友 2016年6月7日 03:43:42 codegay 我两年前一时冲动在豆瓣关注了 ...
- js中的Bom对象模型
Bom可以对浏览器的窗口进行访问和操作.使用Bom,开发者可以移动窗口,改变状态栏中的文本以及执行其他与页面内容不直接相关的动作. window对象: 1.窗口操作 其中moveTo,moveBy是窗 ...
- js 中混乱this
1.在HTML元素事件属性中inline方式使用this关键字: <div onclick=" // 可以在里面使用this ">division element&l ...
- Day14 summary
Since I am writing blog in Ubuntu which has not installed Chinese language package, this blog will b ...
- android切换屏幕时的生命周期
老版本总结: 1.不设置Activity的android:configChanges时 切屏会重新调用生命周期的方法,切横屏调用1次 切竖屏调用2次 2.设置Activity的android:conf ...
- 【技术无关】GPS转北斗卫星定位 系统调研
前言 陆地交通运输是当前GPS卫星定位系统最大的应用领域,我省自08年实施卫星定位系统建设以来,在车辆监控和调度方面发挥了突出的作用:主要功能包括车辆跟踪.线路规划和导航.信息查询.交通指挥.紧急援助 ...