.net将一个DataTable拆分成n个DataTable
来源:互联网 发布:怎么下载网络视频 编辑:程序博客网 时间:2024/05/17 00:59
C#
/// <summary> /// 分解数据表 /// </summary> /// <param name="originalTab">需要分解的表</param> /// <param name="rowsNum">每个表包含的数据量</param> /// <returns></returns> public DataSet SplitDataTable(DataTable originalTab, int rowsNum) { //获取所需创建的表数量 int tableNum = originalTab.Rows.Count / rowsNum; //获取数据余数 int remainder = originalTab.Rows.Count % rowsNum; DataSet ds = new DataSet(); //如果只需要创建1个表,直接将原始表存入DataSet if (tableNum == 0) { ds.Tables.Add(originalTab); } else { DataTable[] tableSlice = new DataTable[tableNum]; //Save orginal columns into new table. for (int c = 0; c<tableNum; c++) { tableSlice[c] = new DataTable(); foreach(DataColumn dc in originalTab.Columns) { tableSlice[c].Columns.Add(dc.ColumnName,dc.DataType); } } //Import Rows for (int i = 0; i < tableNum; i ++) { // if the current table is not the last one if (i != tableNum -1) { for(int j = i*rowsNum ; j < ((i+1)*rowsNum); j++) { tableSlice[i].ImportRow(originalTab.Rows[j]); } } else { for(int k = i*rowsNum ; k < ((i+1)*rowsNum+remainder); k++) { tableSlice[i].ImportRow(originalTab.Rows[k]); } } } //add all tables into a dataset foreach(DataTable dt in tableSlice) { ds.Tables.Add(dt); } } return ds; }以上代码还有点小小的问题,如果需要拆分表的数据不能整除新表包含的数据,上述代码会缺少最后一张表,需要自己适当修改代码。
VB.Net
Public Shared Function SplitDataTable(ByVal originalTab As DataTable, ByVal rowsNum As Integer) As DataSet Dim tableNum As Integer = originalTab.Rows.Count \ rowsNum '相除取整 Dim remainder As Integer = originalTab.Rows.Count Mod rowsNum '相除取余数 Dim ds As DataSet = New DataSet 'if one table is big enough to store, use one table If tableNum = 0 Then ds.Tables.Add(originalTab) Else If remainder > 0 Then '如果有余数,需要多一张表存余数 tableNum = tableNum + 1 End If Dim tableSlice(tableNum - 1) As DataTable 'Save orginal columns into new table Dim c As Integer For c = 0 To (tableNum - 1) tableSlice(c) = New DataTable For Each dc As DataColumn In originalTab.Columns tableSlice(c).Columns.Add(dc.ColumnName, dc.DataType) Next Next 'Import Rows Dim i As Integer If remainder > 0 Then For i = 0 To (tableNum - 1) 'if the current table is not the last table If i <> tableNum - 1 Then Dim j As Integer For j = i * rowsNum To (((i + 1) * rowsNum) - 1) tableSlice(i).ImportRow(originalTab.Rows(j)) Next Else Dim k As Integer 'For k = i * rowsNum To (((i + 1) * rowsNum + remainder) - 1) For k = i * rowsNum To ((i * rowsNum + remainder) - 1) tableSlice(i).ImportRow(originalTab.Rows(k)) Next End If Next Else For i = 0 To (tableNum - 1) Dim j As Integer For j = i * rowsNum To (((i + 1) * rowsNum) - 1) tableSlice(i).ImportRow(originalTab.Rows(j)) Next Next End If 'Add all tables into a dataset For Each dt As DataTable In tableSlice ds.Tables.Add(dt) Next End If Return ds 'SplitDataTable = ds End Function
vb.net的代码我已适当修改,已经过验证正确,大家可以放心使用。
使用如下:
Dim ds As DataSet = SplitDataTable(pdt, 200) '新的DataTable为200条数据 If ds.Tables.Count > 0 Then For i As Integer = 0 To ds.Tables.Count - 1 newDt = ds.Tables(i) '循环DataSet里面的每张DataTable表 '此处是对每个新DataTable表的操作 next End IF
0 0
- .net将一个DataTable拆分成n个DataTable
- 将两个DataTable合并成一个Datatable
- 将两个DataTable合并成一个DataTable
- 将两个DataTable合并成一个DataTable
- 多个DataTable合并成一个DataTable
- [VB.NET]vb.net中如何将两个结构不同的DATATABLE合并成一个DATATABLE
- 将查出来的多个DataTable 合并成一个
- 将一个dataTable拆成多个
- 如何将 DataView 转换成一个 DataTable
- 两个DataTable合并成一个DataTable
- 将两个列不同的DataTable合并成一个新的DataTable
- 将一个DataTable中的DataRow插入另一个DataTable
- 将一个集合转换为一个DataTable
- 将DataView转化成DataTable
- 将DataView转化成DataTable
- 将文本文件转换成DataTable
- 将datatable转换成list
- 将DataRow[]转换成DataTable
- ubuntu samba crash 问题
- 润乾报表存储过程数据集
- MAC端 手机端 远程连接 ———————— Microsoft Remote Desktop
- python 浮点数字符串转int类型
- valser网站(计算机视觉CV,CG学习交流社区)
- .net将一个DataTable拆分成n个DataTable
- iOS适配问题---用2@图和3@图怎么是使用
- Fbx文件解析(一)——FBX SDK for Windows环境配置
- 初学java:Map集合的编历
- python爬虫抓取-helloworld
- 使用swoole的Process实现生产者消费者模型
- 2017年 “印度制造”的iPhone就能够面世了?
- Elasticsearch 管理文档
- Oracle常用维护SQL汇总