两个结构一模一样的DataTable如何合并?

例子:使用Winform进行演示,表2的数据为固定的,表1的数据可以动态添加,通过合并按钮合并表1和表2的数据到表3

1.规定公共的DataTable结构

        /// <summary>
/// 构造空的DataTable
/// </summary>
/// <returns></returns>
private DataTable GetEmptyDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Name");
return dt;
}

2.窗体加载事件中构造表2的数据

  private void Form1_Load(object sender, EventArgs e)
{
//构造表2的数据
DataTable dt2 = this.GetEmptyDataTable();
DataRow dr = dt2.NewRow();
dr["Id"] = Guid.NewGuid();
dr["Name"] = "表二的数据";
dt2.Rows.Add(dr);
this.dgv2.DataSource = dt2;
}

3.动态添加表1的数据

        /// <summary>
/// 新增表1数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAddTable1_Click(object sender, EventArgs e)
{
this.dgv3.DataSource = null;
DataTable dtDataSouce = this.dgv1.DataSource as DataTable;
if (dtDataSouce == null)
{
dtDataSouce = this.GetEmptyDataTable();
}
DataRow dr = dtDataSouce.NewRow();
dr["Id"] = Guid.NewGuid();
dr["Name"] = "第" + dtDataSouce.Rows.Count.ToString() + "条数据";
dtDataSouce.Rows.Add(dr);
this.dgv1.DataSource = dtDataSouce;
}

4.开始合并

        /// <summary>
/// 合并两2个DataTable
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnStartMerge_Click(object sender, EventArgs e)
{
//得到表1的数据
DataTable dt1 = this.dgv1.DataSource as DataTable;
//得到表二的数据
DataTable dt2 = this.dgv2.DataSource as DataTable;
//开始合并(思路:构造空的表dt结构和表1、表2相同 将表1表2的数据添加到dt中) //1. 任意选择一个表进行复制
DataTable dt = dt1.Clone();
//2.循坏遍历表1
foreach (DataRow dr in dt1.Rows)
{
dt.Rows.Add(dr.ItemArray);
}
//3.循环遍历表2
foreach (DataRow dr in dt2.Rows)
{
dt.Rows.Add(dr.ItemArray);
}
//此时dt就是表1和表2的合并数据
this.dgv3.DataSource = dt;
}

5.演示

源代码下载

合并两个结构完全相同的DataTable的更多相关文章

  1. c# 合并两个DataTable

    当两个DataTable 结构相同可以用自带方法(Merge)合并 // // 摘要: // 将指定的 System.Data.DataTable 与当前的 DataTable 合并,指示是否在当前的 ...

  2. 【转载】C#的Merge方法合并两个DataTable对象的数据

    在C#中的Datatable类中,可以使用DataTable类的Merge方法对两个相同结构的DataTable对象进行求并集运算,将两个DataTable对象的数据行合并到其中一个DataTable ...

  3. 剑指Offer15 合并两个已排序链表

    /************************************************************************* > File Name: 15_MergeT ...

  4. 如何用 Git 合并两个库,并保留提交历史

    转载自 https://segmentfault.com/a/1190000000678808 背景 一个中型规模项目,开始规划时就打算采用 C/S 架构,后端是单纯的 API 服务,前端在 Web ...

  5. Android合并两个APP的详细做法(掌握)

    有时候因公司需求,要求合并两个APP 使用里面的功能. 平台:Studio 小白鼠:二维码扫描 和自己项目 详细步骤: /**  * 1.将解压后的android/assets目录复制到项目中的mai ...

  6. [剑指offer] 14. 链表中倒数第K个节点+翻转+逆序打印+合并两个排序链表 + 链表相交(第一个公共节点) (链表)

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路:  两个指针,起始位置都是从链表头开始,第一个比第二个先走K个节点,当第一个走到链表尾时,第二个指针的位置就是倒数第k个节点.(两指针始终相 ...

  7. 如何在Node.js中合并两个复杂对象

    通常情况下,在Node.js中我们可以通过underscore的extend或者lodash的merge来合并两个对象,但是对于像下面这种复杂的对象,要如何来应对呢? 例如我有以下两个object: ...

  8. 剑指Offer面试题:16.合并两个排序的链表

    PS:这也是一道出镜率极高的面试题,我相信很多童鞋都会很眼熟,就像于千万人之中遇见不期而遇的人,没有别的话可说,唯有轻轻地问一声:“哦,原来你也在这里? ” 一.题目:合并两个排序的链表 题目:输入两 ...

  9. 【java基础】 合并两个类型相同的list

    将两个类型相同的list合并,可以用 addAll(Collection<? extends E> c) import java.util.ArrayList; import java.u ...

随机推荐

  1. 74.Android之四种启动模式

    转载:http://www.cnblogs.com/meizixiong/archive/2013/07/03/3170591.html 一.启动模式介绍 启动模式简单地说就是Activity启动时的 ...

  2. Leetcode Integer Replacement

    Given a positive integer n and you can do operations as follow: If n is even, replace n with n/2. If ...

  3. javaScript与MVC

    MVC,就是Module,View,Controller分离,使业务逻辑更加清晰,但是现在公司的项目中很多地方那个不是这样的,很多业务逻辑放在了javascript中实现,这样做的优点就是对于技术要求 ...

  4. C# winform窗体设计-查询单个值

    查询单个值主要用于对成绩最低分,最高分,学生总数,学生性别等信息的统计 在查询单个值的时候用到了ExecuteScalar方法,连接以及语句方面,以及思路和对数据的增删改差不多 下面请看一段代码: s ...

  5. DayuCMS 1.525 /include/global.func.php Foreground Arbitrary Code Execution

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Relevant Link: http://joychou.org/in ...

  6. NetLink Communication Mechanism And Netlink Sourcecode Analysis

    catalog . Netlink简介 . Netlink Function API Howto . Generic Netlink HOWTO kernel API . RFC Linux Netl ...

  7. SQL查询——同一张表的横向与纵向同时比较

    表名:student 表结构及数据: +----+--------+---------+------+------------+--------------+---------+ | id | nam ...

  8. IDEA新建MAVEN项目时速度缓慢

    原因 IDEA根据maven archetype的本质,其实是执行mvn archetype:generate命令,该命令执行时,需要指定一个archetype-catalog.xml文件. 该命令的 ...

  9. HDU 1754 I Hate It(线段树模板题)

    题目链接: 传送门 I Hate It Time Limit: 3000MS     Memory Limit: 32768 K Description 很多学校流行一种比较的习惯.老师们很喜欢询问, ...

  10. ubuntu nginx 安装以及配置文件详解

    1.到nginx官网下载源码包.最好下载稳定版本,nginx官网http://www.nginx.org/ 2.安装nginx依赖包运行命令: sudo apt-get install libssl- ...