Копировать строку из таблицы данных в другую, где есть общие заголовки столбцов - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть две таблицы данных, я пытаюсь скопировать строку из одной таблицы в другую, я попытался это .Дело в том, что мои таблицы не совпадают, у обеих таблиц общие заголовки, но у второй таблицы больше столбцов, поэтому мне нужно «умное» копирование, то есть копирование строки в соответствии с именем заголовка столбца.

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 голосов
/ 21 декабря 2018

Я думаю, что это ваша домашняя работа, но здесь у вас есть простое и не очень умное решение:

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 минуты) иработает.Помните, что вы не указали типы данных столбцов или что-то еще, поэтому я предположил, что везде есть строки для создания простого образца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...