合并两个结构完全相同的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.演示

源代码下载

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏lgp20151222

drools 手动创建kmoudle.xml文件

1182
来自专栏.Net移动开发

.Net语言 APP开发平台——Smobiler学习日志:快速实现手机上常见的GridView

新建MobileForm项,命名为MessageShow2,并拖入一个Image控件和三个Label控件,如图1

1222
来自专栏跟着阿笨一起玩NET

winform如何保持TreeView节点展开和折叠的状态

转载:http://blog.sina.com.cn/s/blog_6abcacf5010138q5.html

1681
来自专栏菩提树下的杨过

ModalPopupExtender用法示例

aspx页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs...

2088
来自专栏程序你好

C#代码示例:在WinForm中创建并绑定一个DataTable

在我的一篇文章中,我解释了如何在没有数据库的情况下以web形式绑定gridview。这里,我将解释如何在没有数据库的windows窗体中绑定datagrid。

1154
来自专栏菩提树下的杨过

几种异步操作方式

其实这也是面试中被问倒的问题:(贴在这里纪念一下,注:只是简单的罗列,详细原理及分析,请参阅《CLR Via c#》第三版相关章节) 1、利用线程池发起异步操...

1886
来自专栏kwcode

利用autocomplete.js实现仿搜索效果(ajax动态获取后端[C#]数据)

实现功能描述: 1、实现搜索框的智能提示 2、第二次浏览器缓存结果 3、实现仿百度搜索 <!DOCTYPE html> <html xmlns="http://...

5375
来自专栏跟着阿笨一起玩NET

JScriptHelper类

441
来自专栏james大数据架构

asp.net中打印指定控件内容

1.写一个PrintHelper类 using System; using System.Data; using System.Configuration; u...

23510
来自专栏跟着阿笨一起玩NET

ASP.NET中Cookie跨域的问题及解决代码

http://www.liyumei.net.cn/post/share18.html

1071

扫码关注云+社区