合并两个结构完全相同的DataTable

两个结构一模一样的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.演示

时间: 2024-11-06 04:11:36

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

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

转载自 https://segmentfault.com/a/1190000000678808 背景 一个中型规模项目,开始规划时就打算采用 C/S 架构,后端是单纯的 API 服务,前端在 Web 上搞一个 SPA,之后再搞其他端也就顺理成章了.只可以第一次弄没经验,有些细节最初没有考虑到. 创建项目的时候前后端真是完全分离的,分成了两个目录,创建了两个 repos.一开始只有一个人干的时候倒也没什么,开两个窗口切来切去也就罢了,后来一是部署起来麻烦,二来主要是其他开发者加入后,代码的版本管理

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

1 /************************************************************************* 2 > File Name: 15_MergeTwoSortList.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年08月30日 星期二 15时49分47秒 6 ********************************

合并两个有序单链表

给出两个有序的单链表,将这两个单链表进行合并,合并出来的链表仍然是有序的. 比如给出链表1:1->3->6->7;链表2:2->4->5->8->9 合并后的链表为:1->2->3->4->5->6->7->8->9 代码展示如下(只给出实现部分) 结构体定义: typedef struct LinkNode { DataType data; struct LinkNode *next; }LinkNode,*pLi

剑指Offer对答如流系列 - 合并两个排序的链表

面试题25:合并两个排序的链表 题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的. 链表结构: public class ListNode { int val; ListNode next=null; ListNode(int val){ this.val=val; } } 问题分析 这道面试题,太常见了!!! 不难,但是容易出错.一方面是合并过程链表中间断裂或者没有做到递增,另一方面是代码的鲁棒性不行,也就是忽略了特殊测试(比如任意一个或者两个链表的头结点

链表(14)----合并两个有序链表

1.链表定义 typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next; } ListElement_t; typedef struct List_t_{ int size; int capacity; ListElement_t *head; ListElement_t *tail; } List_t; 2.合并两个有序链表 ListElement_t * MergeList( ListElement_t *

数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列

#include<iostream> #include<stdlib.h> #define LIST_INIT_SIZE 10/*线性表初始长度*/ #define LIST_CREATENT 2/*每次的增量*/ typedef int ElemType; using namespace std; typedef struct SqList/*线性表的数据结构定义*/ { ElemType *elem;/*线性表基址*/ int length;/*当前线性表所含的元素个数*/ i

java合并两段音频成一段 同时播放类似伴奏

/** * * @param partsPaths 要合成的音频路径数组 * @param unitedFilePath 输入合并结果数组 */ public void uniteWavFile(String[] partsPaths, String unitedFilePath) { byte byte1[] = getByte(partsPaths[0]); byte byte2[] = getByte(partsPaths[1]); byte[] out = new byte[byte1.

合并两个排序列表——剑指offer

题目:输入两个递增排序的列表,合并这两个链表使新的链表结点按照递增排序. 代码: 1 #include<stdio.h> 2 #include"malloc.h" 3 typedef struct node 4 { 5 struct node *next; 6 int data; 7 }*ListNode; 8 9 //尾插法创建链表(不带头结点) 10 ListNode creatrList() 11 { 12 ListNode p = (ListNode)malloc(

面试题 17:合并两个排序的链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 照递增排序的. 两个指针指向两个链表的头结点,取其中值小的作为新链表的头结点,和之前的结点串联,如此递归. 注意用例: 两个链表都为null: 其中一个链表为null: 两个链表有多个结点,有相同的值,不同的值. package offer; /*面试题 17:合并两个排序的链表 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 照递增排序的.*/ public class Problem17 { st