将行从数据表复制到具有公共列标题的另一行

时间:2018-12-20 20:27:22

标签: c# wpf winforms datatable

我有两个数据表,我试图将行从一个表复制到另一个表,我尝试了this。问题是我的表并不完全相同,两个表都有共同的标题,但是到第二个表有更多的列,因此我需要“智能”复制,即根据列标题名称复制行。

d1:

+--------+--------+--------+
|  ID    |  aaa   |  bbb   |
+--------+--------+--------+
|  23    | value1 | value2 |    <----copy this row

d2:

+--------+--------+--------+--------+
|  ID    |  ccc   |  bbb   |  aaa   |
+--------+--------+--------+--------+
|  23    |        | value2 | value1 |       <----I need this result

但是此代码:

string rowID=23;
DataRow[] result = dt1.Select($"ID = {rowID}");
dt2.Rows.Add(result[0].ItemArray);

给予:

d2:

+--------+--------+--------+--------+
|  ID    |  ccc   |  bbb   |  aaa   |
+--------+--------+--------+--------+
|  23    | value1 | value2 |        |    <---- :( NOT what I need

1 个答案:

答案 0 :(得分:0)

我认为这是您的作业,但是在这里,您有一些简单但不太聪明的解决方案:

private DataTable DTCopySample()
{
    int cnt = 0;

    DataTable dt1 = new DataTable();
    dt1.Columns.Add("ID");
    dt1.Columns.Add("aaa");
    dt1.Columns.Add("bbb");

    DataTable dt2 = new DataTable();
    dt2.Columns.Add("ID");
    dt2.Columns.Add("ccc");
    dt2.Columns.Add("bbb");
    dt2.Columns.Add("aaa");

    dt1.Rows.Add();
    dt1.Rows[0]["ID"] = "23";
    dt1.Rows[0]["aaa"] = "val1";
    dt1.Rows[0]["bbb"] = "val2";

    dt1.Rows.Add();
    dt1.Rows[1]["ID"] = "99";
    dt1.Rows[1]["aaa"] = "val99";
    dt1.Rows[1]["bbb"] = "val98";

    string colName = string.Empty;

    foreach (DataRow row in dt1.Rows)
    {
        dt2.Rows.Add();

        foreach (DataColumn col in dt1.Columns)
        {
            dt2.Rows[cnt][col.ColumnName] = row[col.ColumnName].ToString();
        }

        cnt++;
    }

    return dt2;
}

有更智能,更好的解决方案,但这是快速编写的(2分钟)并且可以工作。 请记住,您尚未指定column数据类型或其他任何数据,因此我假设到处都有用于创建简单样本的字符串。