两个结构一模一样的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. 【poj2774】 Long Long Message

    http://poj.org/problem?id=2774 (题目链接) 题意 给出两个只包含小写字母的字符串,求出最长连续公共子串. solution 第一次用后缀数组,感觉有点神...才发现原来 ...

  2. UOJ264 【NOIP2016】蚯蚓

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  3. DataTable是否存在某个列的判断

    使用 DataTable.Columns.Contains方法可以判断某个列名是否存在于某个DataTable中 //添加模拟数据 DataTable t = new DataTable(); Dat ...

  4. discuz /faq.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 . 通过获取管理员密码 . 对管理员密码进行破解.通过在cmd5.com ...

  5. bash的配置

    Bash的启动文件 启动文件也是一种脚本,不过它是在Bash在启动之初就执行它的.不同的启动方式使用的启动文件也有不同. 1. 作为交互的登录脚本环境“交互的”是指你可以再这个环境下输入命令.而所谓的 ...

  6. [iOS OpenCV错误解决]

    (编译使用O-C会出现错误:<list> not found) (未添加系统库会出现的错误:undefined symbols for architecture armv7) iOS工程调 ...

  7. 遵循PSR-4的自动加载

    一.简介 首先这里要了解PSR,Proposing a Standards Recommendation(提出标准建议)的缩写,就是一种PHP开发规范,让我们研发出来的代码更合理.更好维护.可读性更高 ...

  8. 通过Minimal版的iso安装CentOS7之后升级Desktop

    重新安装了CentOS7,但是使用的是Minimal的iso镜像安装的,所以安装之后只有文本界面,这里记录一下重新安装图形界面的过程. 连接网络 通过文本界面登陆后是没有连接网络的,所以需要修改配置连 ...

  9. 基本概率分布Basic Concept of Probability Distributions 1: Binomial Distribution

    PDF下载链接 PMF If the random variable $X$ follows the binomial distribution with parameters $n$ and $p$ ...

  10. hihocoder #1327

    传送门 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个只包含小写字母'a'-'z'的字符串 S ,你需要将 S 中的字符重新排序,使得任意两个相同的字符不连在一 ...