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" |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构