将数据行中的行复制到另一个存在公共列标题的行

Dev*_*evy 5 c# wpf datatable winforms

我有两个数据表,我试图将行从一个表复制到另一个表,我试过这个.问题是我的表格不完全相同,两个表都有公共标题,但是第二个表有更多列,因此我需要"智能"复制,即根据列标题名称复制行.

D1:

+--------+--------+--------+
|  ID    |  aaa   |  bbb   |
+--------+--------+--------+
|  23    | value1 | value2 |    <----copy this row
Run Code Online (Sandbox Code Playgroud)

D2:

+--------+--------+--------+--------+
|  ID    |  ccc   |  bbb   |  aaa   |
+--------+--------+--------+--------+
|  23    |        | value2 | value1 |       <----I need this result
Run Code Online (Sandbox Code Playgroud)

但是这段代码:

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

得到:

D2:

+--------+--------+--------+--------+
|  ID    |  ccc   |  bbb   |  aaa   |
+--------+--------+--------+--------+
|  23    | value1 | value2 |        |    <---- :( NOT what I need
Run Code Online (Sandbox Code Playgroud)

Mac*_* S. 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;
}
Run Code Online (Sandbox Code Playgroud)

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