zoukankan      html  css  js  c++  java
  • DataTable中的数据复制及合并

    Dataable的复制,合并操作(不想废话,直接进入正题)

    方法1

                //创建一个新的表  复制表1的数据结构
                DataTable dt = DataTable1.Clone();
                
                object[] obj = new object[dt.Columns.Count];
                //添加表1的数据
                for (int i = 0; i < DataTable1.Rows.Count; i++)
                {
                    DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);
                    dt.Rows.Add(obj);
                }
                //添加表2的数据
                for (int i = 0; i < DataTable2.Rows.Count; i++)
                {
                    DataTable2.Rows[i].ItemArray.CopyTo(obj, 0);
                    dt.Rows.Add(obj);
                }    
    

     方法2:ImportRow()方法

               //拷贝DataTable1的结构和数据
               //到dt中
                DataTable dt= DataTable1.Copy();
                //把DataTable1的数据往newDataTable 表中添加
                foreach (DataRow dr in DataTable1.Rows)
                {
                    dt.ImportRow(dr);
                }
    

    两张结构不同相同的情况

     先复制表结构,将一张表结构直接复制到新表中,第二张表的做循环往新表中做添加列的操作

    //先复制表1的结构
    DataTable  dt  =dt1.Clone();
    //复制表2的结构
    for(int i=0;i<dt2.Columns.Count; i++)
    {
    //对表2做循环,得到表2的列,往声明的dt中做添加列的操作
    dt.Columns.Add(dt2.Columns[i].ColumnName);
    
    }
    

    在复制数据的时候,需要注意的是合并表的行、列的操作

                DataTable dt1 = new DataTable();
                dt1.Columns.Add("name");
                dt1.Rows.Add("三毛");
                DataTable dt2 = new DataTable();
                dt2.Columns.Add("id");
    
                dt2.Columns.Add("sex");
                dt2.Rows.Add("1");
                dt2.Rows[0]["sex"] = "xx";
                dt2.Rows.Add("2", "aa");
                DataTable dt = dt1.Clone();
                for (int i = 0; i < dt2.Columns.Count; i++)
                {
                    dt.Columns.Add(dt2.Columns[i].ColumnName);
                }
                //在赋值的时候,需要先知道datatbale列数量的情况
                var dt1c = dt1.Columns.Count;
                var dt2c = dt2.Columns.Count;
                //在循环赋值时将第一个datatable值写入后
                //两个datable的count会有四种情况  
           //行:表1比表2多; 表1比表2少
         //列:表1比表2多;表1比表2少 int RowCount = dt1.Rows.Count > dt2.Rows.Count ? dt1.Rows.Count : dt2.Rows.Count; var sentry = dt1c > dt2c;//定义一个哨兵控制列的逻辑 for (int i = 0; i < RowCount; i++) { object[] value = new object[dt.Columns.Count]; if (dt1.Rows.Count >= i + 1) { dt1.Rows[i].ItemArray.CopyTo(value, 0); } if (dt2.Rows.Count >= i + 1) { if (sentry) { dt2.Rows[i].ItemArray.CopyTo(value, dt1.Columns.Count - 1 > 0 ? 1 : dt1.Columns.Count - 1); } else { dt2.Rows[i].ItemArray.CopyTo(value, dt1.Columns.Count); } } dt.Rows.Add(value); }

      

      

      

  • 相关阅读:
    centos7 下安装MongoDB
    centos7 学习笔记
    MongoDB相关资料收集
    centos 下安装.net core
    sql server 2008 r2 中的oracle发布使用笔记
    sql server 与oracle数据互导的一种思路--sql server链接服务器
    Visual Studio 2015正式版/产品密钥 Win10正式版官方原版ISO镜像下载大全&安装激活教程
    Modbus库开发笔记:Modbus ASCII Slave开发
    PID控制器开发笔记之十一:专家PID控制器的实现
    μCUnit,微控制器的单元测试框架
  • 原文地址:https://www.cnblogs.com/li-lun/p/4758254.html
Copyright © 2011-2022 走看看