如题 
直接添加的时候会报错 “此列已属于另一个 DataTable”
datarow可以用 ImportRow来解决 那column如何解决?

解决方案 »

  1.   

    等了一下午没有人回复好的方法,就自己写了一个合并的方法,也不知道好不好,如果有需要有烂的找更好的方法的就拿去用把.
    public static DataTable MergeDataTable(DataTable dt1,DataTable dt2)
        {
            //定义dt的行数
            int dtRowCount = 0;        //dt的行数为dt1或dt2中行数最大的行数
            if (dt1.Rows.Count > dt2.Rows.Count)
            {
                dtRowCount = dt1.Rows.Count;
            }
            else
            {
                dtRowCount = dt2.Rows.Count;
            }        dt = new DataTable();
            //向dt中添加dt1的列名
            for (int i = 0; i < dt1.Columns.Count; i++)
            {
                dt.Columns.Add(dt1.Columns[i].ColumnName.ToString());
            }        //向dt中添加dt2的列名
            for (int i = 0; i < dt2.Columns.Count; i++)
            {
                dt.Columns.Add(dt2.Columns[i].ColumnName.ToString());
            }        for (int i = 0; i < dtRowCount; i++)
            {
                row = dt.NewRow();
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    for (int k = 0; k < dt1.Columns.Count ; k++)
                    {
                        if ((dt1.Rows.Count - 1) >= i)
                        {
                            row[k] = dt1.Rows[i].ItemArray[k];
                        }
                    }                for (int k = 0; k < dt2.Columns.Count ; k++)
                    {
                        if ((dt2.Rows.Count - 1 )>= i)
                        {
                            row[dt1.Columns.Count + k] = dt2.Rows[i].ItemArray[k];
                        }
                    }
                }
                dt.Rows.Add(row);
            }
            return dt;
        }
      

  2.   

    可以用递归调用的方式将你的一个ds中的Table合并完.
     private void MergeDataTables()
        {
            dt = new DataTable();
            dt = ds.Tables[0];
            for (int i = 0; i < ds.Tables.Count - 1; i++)
            {
                dt = ClsDataHandler.MergeDataTable(dt, ds.Tables[i + 1]);
            }
        }