Как мы можем скопировать данные столбца одной DataTable в другую, даже если в DataTables есть разные имена столбцов? - PullRequest
3 голосов
/ 07 апреля 2010

У меня есть две таблицы данных. Сначала

DataTable NameAddressPhones = new DataTable(); 

с тремя столбцами имя, адрес и номер телефона . Но мне нужны только два столбца имя и адрес данные, поэтому я хочу скопировать эти столбцы (с данными) в новый DataTable.

DataTable NameAddress = new DataTable(); 

Для этого я делаю

            foreach (DataRow sourcerow in NameAddressPhones.Rows)
            {
                DataRow destRow = NameAddress.NewRow();
                foreach (string colname in columns)
                {
                    destRow[colname] = sourcerow[colname];
                }
                NameAddress.Rows.Add(destRow);
            }

Я очищаю NameAddressPhones (first) DataTable каждый раз, когда в таблицу добавляются новые записи. И каждый раз будет одинаковое количество столбцов, но имена столбцов будут отличаться, например Нм вместо Имя, Добавить вместо Адрес . Теперь проблема второй DataTable уже имеет имена столбцов Name and Address , и теперь я хочу скопировать данные столбцов Nm и Add во второй DataTable, но имена столбцов отличаются от имен столбцов второго DataTable. Поэтому, даже если существуют разные имена столбцов, я хочу скопировать Нм данные столбца первого DataTable в столбец Имя второго DataTable и столбца Добавить данные первого DataTable в столбец Адрес второй таблицы данных.

Вкратце, как мы можем скопировать данные столбца из одной таблицы данных в другую, даже если существуют разные имена столбцов обеих таблиц данных, например Нм - это имя столбца первой таблицы данных, а Имя - это имя столбца второго DataTable, а затем данные столбца Нм должны быть скопированы в столбец Имя .

Ответы [ 3 ]

10 голосов
/ 07 апреля 2010

Вот самый простой способ:

foreach (DataRow sourcerow in NameAdressPhones.Rows)
{
    DataRow destRow = NameAdress.NewRow();
    destRow["Name"] = sourcerow["Nm"];
    destRow["Address"] = sourcerow["Add"];
    NameAdress.Rows.Add(destRow);
}

Автоматизация великолепна, когда она доступна. Если это не так, вам необходимо каким-то образом сопоставить исходные столбцы с целевыми столбцами.

Если столбцы расположены в одном и том же порядке в обеих таблицах, вы могли бы просто ссылаться на значения по порядковому номеру вместо имени столбца, но это плохая идея, я даже не собираюсь публиковать какой-либо код за это.

1 голос
/ 07 апреля 2010

Используйте порядковый номер столбца, а не имена:

destRow[0] = sourcerow[0]; // for column 0 = "Name" or "NM"
0 голосов
/ 07 апреля 2010

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

...