多DataTable,相同列合併

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


             
        }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章