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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值