博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# DataTable操作,转载
阅读量:6890 次
发布时间:2019-06-27

本文共 3211 字,大约阅读时间需要 10 分钟。

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"
 
原文地址:http://www.cnblogs.com/xiaofengfeng/archive/2012/06/27/2565941.html
posted on
2014-12-12 14:14 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/kuair/p/4159628.html

你可能感兴趣的文章
Samba文件共享服务
查看>>
Check Point SMB 操作手册
查看>>
百万PV网站架构案例
查看>>
Redis PHP连接Redis
查看>>
苏研环境gerrit提交
查看>>
还在傻傻用Ctrl+C和Ctrl+V吗?这2个行列转置方法助你效率提80%!
查看>>
webpack4.0各个击破(5)—— Module篇
查看>>
没有什么内存问题,是一行Python代码解决不了的
查看>>
备忘录模式
查看>>
RabbitMQ之集群搭建
查看>>
电商类APP的消息推送push该怎么做?
查看>>
进程占用量100%问题定位
查看>>
Gitlab使用Webhook实现Push代码自动部署
查看>>
python实现乘法表
查看>>
CentOS安装crontab及使用方法
查看>>
Dockerfile构建容器
查看>>
我的友情链接
查看>>
Shell、Xterm、Gnome-Terminal,Konsole简介
查看>>
iptables小脚本
查看>>
configure.ac:9: error: Autoconf version 2.63 or higher is required
查看>>