C# 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)排序的思考
因项目需要,在获得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中找对应的行,然后复制到新表中。
该方法的效率还是可以的,不过如果交集次数大于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"
C# DataTable操作,转载的更多相关文章
- C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换
LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...
- SqlServer中的merge操作(转载)
SqlServer中的merge操作(转载) 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在technet上搜索发现别有 ...
- C# 基础:DataTable操作、发邮件
本文出自:https://www.cnblogs.com/2186009311CFF/p/6865909.html DataTable操作 据参数删除为0的列:包括遍历.删除.取值 public st ...
- 安卓自定义View进阶-Canvas之画布操作 转载
安卓自定义View进阶-Canvas之画布操作 转载 https://www.gcssloop.com/customview/Canvas_Convert 本来想把画布操作放到后面部分的,但是发现很多 ...
- QTP的DataTable操作整理(注---不知转载多少遍)
返回值:数字 示例: 以下示例使用 GetRowCount 方法查找 MySheet 运行时数据表中最长的列中的总行数,并将其写入报告. rowcount = DataTable.GetSheet(& ...
- QTP中DataTable操作大全
序曲 假设现在有一个Excel文件:D:\data.xls,里面的具体内容如下:有两个Sheet,第一个叫Login,第二个叫InsertOrder: 当前QTP的Test中有两个Action:Log ...
- DataTable 操作
public void CreateTable() { //创建表 DataTable dt = new DataTable(); //1.添加列 dt.Columns.Add("Name& ...
- [C#] DataTable 操作汇总(持续更新)
1.DataTable 分组操作 var grow = dt.Select().GroupBy((row1) => { return new { //分组的字段 fieldA = row1[&q ...
- VS调试 DataTable (转载)
调试的时候遇到一个问题:不知道怎么在自动窗口或者添加监视那里查看DataSet或者DataTable的具体的值.度娘了一下很多都是添加DataTable.Rows[][]监视,但是一行一列地看还是有点 ...
- LINQ系列:LINQ to DataSet的DataTable操作
LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...
随机推荐
- CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
1.npm install -g increase-memory-limit 2.increase-memory-limit 3.重启解决
- .Net Standard .Net Framework .Net Core 版本对应
- docker持久化数据存储
一.把数据存储到本地/opt/data目录下面,容器挂载到/data目录下面 [root@docker-1 ~]# docker run -itd --name www -v /opt/data:/d ...
- CF513F2 题解
题意 传送门 有 \(a+b+1\) 个会动的棋子,在一个大小为 \(n\times m\) 的棋盘上,棋盘上有一些点有障碍.棋子中,有 \(a\) 个红色棋子,\(b\) 个蓝色棋子,和 \(1\) ...
- 如何把接口返回文件流读取后写入Excel
代码: res = res.content #接口返回的内容 with open(path,mode='wb') as file: #excel的路径 file.write(res)
- react native 更改项目包名
修改工程名,需要以下几个步骤: 修改android/app/build.gradle里的applicationId,为新包名,譬如:com.xxx.yyy.myProject 修改android/ap ...
- Linux:服务器(CentOS)搭建FTP服务
Vsftpd(very secure FTP deamon)是众多Linux发行版中默认的FTP服务器.本文以CentOS 8(腾讯云)服务器为例,使用vsftpd搭建Linux云服务器的FTP服务器 ...
- mark一下,python2.7版本不能直接print中文字符串,3.0以上的版本是可以的
mark一下,python2.7版本不能直接print中文字符串,3.0以上的版本是可以的
- 29 Django自定义模板功能
在相应的app文件夹中,创建templatetags文件夹,必须是templatetags文件夹命名: 注意:templatetags文件夹中必须要有__init__.py文件 jd.py: from ...
- php success error 封装跳转
/** * Warning提示信息 * @param string $type 提示类型 默认支持success, error, info * @param string $msg 提示信息 * @p ...