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

  

  

  

原文地址:https://www.cnblogs.com/li-lun/p/4758254.html