• 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); }

      

      

      

  • 相关阅读:
    Volatile关键字
    ThreadPoolExecutor线程池基本原理及使用
    HashMap线程不安全源码解析(1.7 + 1.8)
    SpringBoot+ajax+formData实现图片上传和回显
    BloomFilter
    POST和GET
    快手电话面试
    Apache SSI 远程命令执行漏洞
    SYSTEM--服务器提权
    封神台靶场练习(2)
  • 原文地址:https://www.cnblogs.com/li-lun/p/4758254.html
Copyright © 2020-2023  润新知