有时我们知道了两个DataTable1和DataTable2,我们希望将它们合并为一个新的DataTable(下面的例子中命名为了newDataTable),这就分为两种情况:DataTable1和DataTable2结构相同、DataTable1和DataTable2结构不同,下面分别介绍怎么进行合并。

一、DataTable1和DataTable2结构相同的情况,结构相同我们只需要把两者的数据罗列到一块就可以了

首先初始化相同结构DataTable(测试用的)

        void InitDataTable1(DataTable dt)        {            dt.Columns.Add("student_no");            dt.Columns.Add("student_name");            dt.Rows.Add("001", "June");            dt.Rows.Add("002", "zhang");            dt.Rows.Add("003", "jun");        }void InitDataTable2(DataTable dt)        {            dt.Columns.Add("student_no");            dt.Columns.Add("student_name");            dt.Rows.Add("111", "ABC");            dt.Rows.Add("222", "XYZ");            dt.Rows.Add("333", "OPQ");        }

合并方法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的结构和数据有两种方法

            //克隆DataTable1的结构            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);            }

或者直接用自带的Copy方法  DataTable newDataTable = DataTable1.Copy();
二、DataTable1和DataTable2结构不同相同的情况,我们可以先向新表中添加DataTable1的数据,然后再向每行的后面添加添加DataTable2的数据,注意两者的行数不一定相同。

首先初始化相同结构DataTable(测试用的)

        void InitDataTable1(DataTable dt)        {            dt.Columns.Add("student_no1");            dt.Columns.Add("student_name1");            dt.Rows.Add("001", "June");            dt.Rows.Add("002", "zhang");//dt.Rows.Add("003", "jun");        }void InitDataTable2(DataTable dt)        {            dt.Columns.Add("student_no2");            dt.Columns.Add("student_name2");            dt.Rows.Add("111", "ABC");            dt.Rows.Add("222", "XYZ");            dt.Rows.Add("222", "ASD");        }

方法(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;        }

转载于:https://www.cnblogs.com/wifi/articles/2479989.html

多个DataTable的合并成一个新表相关推荐

  1. java合并多个表格为一个_多个DataTable的合并成一个新表

    有时我们知道了两个DataTable1和DataTable2,我们希望将它们合并为一个新的DataTable(下面的例子中命名为了newDataTable),这就分为两种情况:DataTable1和D ...

  2. oracle横向合并两张表,SQL中将两个表合并成一个新表 SQL如何合并两个表并生成一个新表?...

    sql把两个表合并成一个新表的语句应该怎么写SQL SERVER: select * into 表3 from ( select 字段列表1 from 表1 union all select 字段列表 ...

  3. 用户输入一个字符串,将下标为偶数的字符提出来合并成一个新的字符串A,再将下标为奇数的字符提出来合并成一个新的字符串B,再将字符串A和B连接起来并输出。

    根据下述要求,编写一个程序:用户输入一个字符串,将下标为偶数的字符提出来合并成一个新的字符串A,再将下标为奇数的字符提出来合并成一个新的字符串B,再将字符串A和B连接起来并输出. rs = [] ev ...

  4. 有序表A和B,其元素均按照从小到大升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是从小到大的升序排列。

    题目要求:有序表A和B,其元素均按照从小到大升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是从小到大的升序排列. 代码实现: void merge(SqList A,SqList B, ...

  5. 顺序表:将两个有序表合并成一个新的有序顺序表

    题目:将两个有序表合并成为一个新的有序顺序表,并由函数返回结果顺序表. 算法思想:假设有AB两个顺序表,要使得合并后仍然有序,因此可以将AB中对应的数作比较,把较小的放入C中,比完之后将剩下的依次放入 ...

  6. c++实现两有序链表合并成一个新的有序链表

    包括定义的链表,插入数据,及输出打印 #include <iostream> #include <vector> #include <numeric> #inclu ...

  7. python合并两个文本文件内容_用Python 将两个文件的内容合并成一个新的文件.

    一个文件的内容是: Introduction to Programming, Networking Fundamentals, Internetworking Technologies, Platfo ...

  8. python文件合并_用Python 将两个文件的内容合并成一个新的文件.

    一个文件的内容是:IntroductiontoProgramming,NetworkingFundamentals,InternetworkingTechnologies,PlatformTechno ...

  9. JavaScript如何合并数组对象中key相同的数据(把数组对象某个属性相同的对象合并成一个新的数组)

    let resData = [{"name": "住院医疗最高报销","tagName": "医疗","ins ...

最新文章

  1. 虚拟机下判断文件或目录是否存在
  2. Web纯前端“旭日图”实现元素周期表
  3. CSS中overflow:scroll怎么设置只上下滚动而不左右滚动
  4. [SDOI2016]生成魔咒
  5. void *变量用法
  6. 如何画图命名_餐厅新出菜品,该如何有效推广?
  7. sqlplus中调用shell_(转)shell 调用sqlplus各种情况示例
  8. xtend怎么使用_使用Xtend构建Vaadin UI
  9. leetcode 452. 用最少数量的箭引爆气球(贪心算法)
  10. Linux Shell高级技巧(二)
  11. new、delete与malloc、free的详解
  12. 【SQL】MERGE
  13. using的基本用法
  14. 最新最全的 SQL 入门教程,老少皆宜,强烈推荐!
  15. 清华大学ISATAP访问IPv6设置
  16. SSM_JSON格式增删改查
  17. Android学习日记(yzy):intent传递的多种数据类型
  18. WordPress如何添加canonical标签
  19. 求次方的c语言程序,C语言编程求13的13次方的最后三位数
  20. python里的log怎么表示_python中的对数log函数表示及用法

热门文章

  1. java类型过滤文本_JAVA实现过滤掉文本中的表情
  2. 使用screen的时候出现了如下错误: Cannot open your terminal '/dev/pts/0' - please check.
  3. 报错,o.h.engine.jdbc.spi.SqlExceptionHelper   : Unknown column ‘template_name‘ in ‘field list‘
  4. Spark基础学习笔记23:DataFrame与Dataset
  5. 英语学习笔记2019-9-29
  6. VB讲课笔记03:对象及其操作
  7. 现在进行时和一般现在时的将来时态_39
  8. 物主代词-mine、yours_33
  9. ie11浏览器可以下载java吗_如何卸载IE11? 如何安装低版本的IE浏览器?
  10. java 操作属性值_java反射机制根据属性名获取属性值的操作