多DataTable,相同列合并

2 篇文章 0 订阅
1 篇文章 0 订阅
        protected DataTable MergeDataTable(DataTable dt1, DataTable dt2, string KeyColName)
        {
            //合并列
            DataTable ndt1 = dt1.Copy();
            DataTable ndt2 = dt2.Copy();
            ndt1.PrimaryKey = new DataColumn[] { ndt1.Columns[KeyColName] };
            ndt2.PrimaryKey = new DataColumn[] { ndt2.Columns[KeyColName] };
            for (int i = 0; i < ndt2.Columns.Count; i++)
            {
                if (ndt2.Columns[i].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
                {
                    ndt1.Columns.Add(ndt2.Columns[i].ColumnName);
                }
            }


            //合并相同主键的数据
            for (int i = 0; i < ndt1.Rows.Count; i++)
            {
                DataRow inrow = ndt2.Rows.Find(ndt1.Rows[i][KeyColName]);
                if (inrow != null)
                {
                    for (int j = 0; j < ndt2.Columns.Count; j++)
                    {
                        if (ndt2.Columns[j].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
                        {
                            ndt1.Rows[i][ndt2.Columns[j].ColumnName] = inrow[ndt2.Columns[j].ColumnName];
                        }
                    }
                    ndt2.Rows.Remove(inrow);
                }
            }
            //合并不同主键的数据
            for (int i = 0; i < ndt2.Rows.Count; i++)
            {
                DataRow row = ndt1.NewRow();
                for (int j = 0; j < ndt2.Columns.Count; j++)
                {
                    row[ndt2.Columns[j].ColumnName] = ndt2.Rows[i][ndt2.Columns[j].ColumnName];
                }
                ndt1.Rows.Add(row);
            }
            return ndt1;

        }

        //调用测试

        protected void creatDataTable()
        {
            //第一步 先初始化数据   
            DataTable dtA = new DataTable();
            dtA.Columns.Add("id", typeof(int));
            dtA.Columns.Add("name", typeof(string));
            dtA.Rows.Add(1, "a");
            dtA.Rows.Add(2, "b");
            dtA.Rows.Add(3, "c");
            dtA.Rows.Add(4, "d");


            DataTable dtB = new DataTable();
            dtB.Columns.Add("id", typeof(int));
            dtB.Columns.Add("name2", typeof(string));
            dtB.Rows.Add(1, "a");
            dtB.Rows.Add(2, "d"); 
            dtB.Rows.Add(4, "f");
 
           DataTable  drt= MergeDataTable(dtA, dtB, "id");


             
        }


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值