2つのDataTable(dtOneとdtTwo)があり、それらをマージして別のDataTable(dtAll)に入れたい場合。 C#でこれを行うにはどうすればよいですか?データテーブルでMergeステートメントを試しましたが、これはvoidを返します。 Mergeはデータを保存しますか?たとえば、次の場合:
dtOne.Merge(dtTwo);
DtOneは変更されますか、dtTwoは変更されますか。どちらかが変更された場合、変更は保持されますか?
Mergeがvoidを返すため、これができないことはわかっていますが、dtOneとdtTwoの両方のマージをdtAllに格納できるようにしたいのです。
//Will Not work, How do I do this
dtAll = dtOne.Merge(dtTwo);
Merge
メソッドは2番目のテーブルから値を取得し、それらを最初のテーブルにマージします。したがって、最初のテーブルは両方の値を保持します。
元のテーブルの両方を保持する場合は、最初に元のテーブルをコピーしてからマージできます。
dtAll = dtOne.Copy();
dtAll.Merge(dtTwo);
(かなり遅いですが、誰かがこの質問につまずくのを助けるかもしれません。)
ジェロミーアーバインの答え の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);
}
dtAll = dtOne.Copy();
dtAll.Merge(dtTwo,true);
パラメータTRUEは変更を保持します。
詳細については [〜#〜] msdn [〜#〜] を参照してください。
DataTable dtAll = new DataTable();
DataTable dt= new DataTable();
foreach (int id in lst)
{
dt.Merge(GetDataTableByID(id)); // Get Data Methode return DataTable
}
dtAll = dt;
これは私が2つのデータテーブルをマージし、最終結果をグリッドビューにバインドするためにしたことです
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();
}
}