ASP.NET合并两个相关联的DataTable
类别:编程学习 浏览量:4750
时间:2013-11-30 ASP.NET合并两个相关联的DataTable
ASP.NET合并两个相关联的DataTable分为两种情况:DataTable1和DataTable2结构相同、DataTable1和DataTable2结构不同,下面分别介绍怎么进行合并。
一、DataTable1和DataTable2结构相同的情况
结构相同我们只需要把两者的数据罗列到一块就可以了
合并方法1:用Rows.Add方法
DataTable newDataTable = DataTable1.Clone();
object[] obj = new object[newDataTable.Columns.Count];
//添加DataTable1的数据
for (int i = 0; i < DataTable1.Rows.Count; i++)
{
DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);
newDataTable.Rows.Add(obj);
}
//添加DataTable2的数据
for (int i = 0; i < DataTable2.Rows.Count; i++)
{
DataTable2.Rows[i].ItemArray.CopyTo(obj, 0);
newDataTable.Rows.Add(obj);
}
合并方法2:用DataTable.ImportRow方法
//拷贝DataTable1的结构和数据
DataTable newDataTable = DataTable1.Copy();
//添加DataTable2的数据
foreach (DataRow dr in DataTable2.Rows)
{
newDataTable.ImportRow(dr);
}
二、DataTable1和DataTable2结构不同相同的情况
我们可以先向新表中添加DataTable1的数据,然后再向每行的后面添加添加DataTable2的数据,注意两者的行数不一定相同。
方法(1)先添加第一个表,再添加第二个表
/// <summary>
/// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable
/// </summary>
/// <param name="DataTable1">表1</param>
/// <param name="DataTable2">表2</param>
/// <param name="DTName">合并后新的表名</param>
/// <returns>合并后的新表</returns>
private DataTable UniteDataTable(DataTable DataTable1, DataTable DataTable2, string DTName)
{
//克隆DataTable1的结构
DataTable newDataTable = DataTable1.Clone();
for (int i = 0; i < DataTable2.Columns.Count; i++)
{
//再向新表中加入DataTable2的列结构
newDataTable.Columns.Add(DataTable2.Columns[i].ColumnName);
}
object[] obj = new object[newDataTable.Columns.Count];
//添加DataTable1的数据
for (int i = 0; i < DataTable1.Rows.Count; i++)
{
DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);
newDataTable.Rows.Add(obj);
}
if (DataTable1.Rows.Count >= DataTable2.Rows.Count)
{
for (int i = 0; i < DataTable2.Rows.Count; i++)
{
for (int j = 0; j < DataTable2.Columns.Count; j++)
{
newDataTable.Rows[i][j + DataTable1.Columns.Count] = DataTable2.Rows[i][j].ToString();
}
}
}
else
{
DataRow dr3;
//向新表中添加多出的几行
for (int i = 0; i < DataTable2.Rows.Count - DataTable1.Rows.Count; i++)
{
dr3 = newDataTable.NewRow();
newDataTable.Rows.Add(dr3);
}
for (int i = 0; i < DataTable2.Rows.Count; i++)
{
for (int j = 0; j < DataTable2.Columns.Count; j++)
{
newDataTable.Rows[i][j + DataTable1.Columns.Count] = DataTable2.Rows[i][j].ToString();
}
}
}
newDataTable.TableName = DTName; //设置DT的名字
return newDataTable;
方法(2)先添加行数多的表。其实我们也可以先判断哪个表的行数多,就先添加哪个表,然后再添加行少的表就可以了。
/// <summary>
/// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable
/// </summary>
/// <param name="DataTable1">表1</param>
/// <param name="DataTable2">表2</param>
/// <param name="DTName">合并后新的表名</param>
/// <returns>合并后的新表</returns>
private DataTable UniteDataTable2(DataTable DataTable1, DataTable DataTable2, string DTName)
{
DataTable newDataTable = new DataTable();
if (DataTable1.Rows.Count > DataTable2.Rows.Count)
{
newDataTable = FillData(DataTable1, DataTable2);
}
else
{
newDataTable = FillData(DataTable2, DataTable1);
}
newDataTable.TableName = DTName; //设置DT的名字
return newDataTable;
}
private DataTable FillData(DataTable dt1, DataTable dt2)
{
//克隆DataTable1的结构
DataTable newDataTable = dt1.Clone();
for (int i = 0; i < dt2.Columns.Count; i++)
{
//再向新表中加入DataTable2的列结构
newDataTable.Columns.Add(dt2.Columns[i].ColumnName);
}
object[] obj = new object[newDataTable.Columns.Count];
//添加DataTable1的数据
for (int i = 0; i < dt1.Rows.Count; i++)
{
dt1.Rows[i].ItemArray.CopyTo(obj, 0);
newDataTable.Rows.Add(obj);
}
for (int i = 0; i < dt2.Rows.Count; i++)
{
for (int j = 0; j < dt2.Columns.Count; j++)
{
newDataTable.Rows[i][j + dt1.Columns.Count] = dt2.Rows[i][j].ToString();
}
}
return newDataTable;
}
您可能感兴趣
- ASP.NET参数化模糊查询
- ASP.NET 生成条形码
- ASP.NET使用JavaScriptSerializer实现序列化与反序列化
- ASP.NET实现多文件上传
- ASP.NET实现FTP上传文件
- ASP.NET生成二维码
- ASP.NET写文件的方法
- ASP.NET中Web.config文件的配置
- asp.net如何实现word文档在线预览
- ASP.NET函数返回多个值的几种方法
- asp.net判断上传文件格式
- ASP.NET给图片加文字水印
- ASP.NET压力测试
- ASP.NET参数化查询
- asp.net中fileupload上传文件的方法
- ASP.NET给图片加图片水印
- 越南新娘(越南新娘婚介网站)
- 越南新娘(越南新娘骗婚套路流程)
- 菲律宾游学(菲律宾游学中介机构)
- 菲律宾美食(菲律宾美食排行榜前十名)
- 菲律宾特产(菲律宾特产最值得买回国)
- 越南特产(越南特产首饰)
热门推荐
- 面试中常见的问题有哪些
- wampserver怎么进后台(WampServer下使用多端口访问的技巧)
- 怎样使用python图像处理(Python Image模块基本图像处理操作小结)
- sqlserver查看表和存储过程的架构(SQL Server 远程更新目标表数据的存储过程)
- pythontkinter项目界面(python Tkinter版学生管理系统)
- mysql缓存和redis查询效率(浅谈MySQL与redis缓存的同步方案)
- extjs card卡片式布局
- docker容器端口和内部进程(Docker动态给容器Container暴露端口操作)
- python监控系统界面(Python远程视频监控程序的实例代码)
- html5 设置缓存(HTML5实现应用程序缓存Application Cache)