Слияние 2 DataTables и сохранение в новом
Если у меня есть 2 DataTables (dtOne и dtTwo), и я хочу объединить их и поместить их в другой DataTable (dtAll). Как это сделать на С#? Я попробовал оператор Merge на datatable, но это возвращает void. Сохраняет ли Merge данные? Например, если я:
dtOne.Merge(dtTwo);
Изменяется ли dtOne или изменяется dtTwo, и если какой-либо из них изменяется, сохраняются ли изменения?
Я знаю, что не могу этого сделать, потому что Merge возвращает void, но я хочу иметь возможность сохранять слияние как dtOne, так и dtTwo в dtAll:
//Will Not work, How do I do this
dtAll = dtOne.Merge(dtTwo);
Ответы
Ответ 1
Метод Merge
берет значения из второй таблицы и объединяет их с первой таблицей, поэтому первая теперь будет удерживать значения от обоих.
Если вы хотите сохранить обе исходные таблицы, вы можете сначала скопировать оригинал, а затем слить:
dtAll = dtOne.Copy();
dtAll.Merge(dtTwo);
Ответ 2
(Довольно поздно, но может помочь кому-то споткнуться на этот вопрос.)
Вместо dtAll = dtOne.Copy();
в Джером Ирвин ответить, вы можете сделать:
dtAll = new DataTable();
...
dtAll.Merge(dtOne);
dtAll.Merge(dtTwo);
dtAll.Merge(dtThree);
...
и т.д.
Этот метод полезен в цикле, где вы хотите итеративно объединять таблицы данных:
DataTable dtAllCountries = new DataTable();
foreach(String strCountry in listCountries)
{
DataTable dtCountry = getData(strCountry); //Some function that returns a data table
dtAllCountries.Merge(dtCountry);
}
Ответ 3
dtAll = dtOne.Copy();
dtAll.Merge(dtTwo,true);
Параметр TRUE сохраняет изменения.
Подробнее см. ссылку ниже.
http://msdn.microsoft.com/en-us/library/wkk7s5zk.aspx
Ответ 4
DataTable dtAll = new DataTable();
DataTable dt= new DataTable();
foreach (int id in lst)
{
dt.Merge(GetDataTableByID(id)); // Get Data Methode return DataTable
}
dtAll = dt;
Ответ 5
Это то, что я сделал для слияния двух типов данных и привязки конечного результата к gridview
DataTable dtTemp=new DataTable();
for (int k = 0; k < GridView2.Rows.Count; k++)
{
string roomno = GridView2.Rows[k].Cells[1].Text;
DataTable dtx = GetRoomDetails(chk, roomno, out msg);
if (dtx.Rows.Count > 0)
{
dtTemp.Merge(dtx);
dtTemp.AcceptChanges();
}
}