Fusionner 2 DataTables et stocker dans un nouveau
Si j'ai 2 DataTables (dtOne et dtTwo) et que je veux les fusionner et les mettre dans un autre DataTable (dtAll). Comment puis-je faire cela en C #? J'ai essayé la déclaration de fusion sur le datatable, mais cela retourne nul. La fusion conserve-t-elle les données? Par exemple, si je le fais:
dtOne.Merge(dtTwo);
DtOne change-t-il ou dtTwo change-t-il et si l'un d'entre eux change, les modifications sont-elles conservées?
Je sais que je ne peux pas le faire parce que Merge renvoie la valeur NULL, mais je veux pouvoir stocker la fusion de dtOne et de dtTwo dans dtAll:
//Will Not work, How do I do this
dtAll = dtOne.Merge(dtTwo);
La méthode Merge
prend les valeurs de la deuxième table et les fusionne avec la première table, de sorte que la première conserve les valeurs des deux.
Si vous souhaitez conserver les deux tables d'origine, vous pouvez d'abord copier l'original, puis fusionner:
dtAll = dtOne.Copy();
dtAll.Merge(dtTwo);
(Assez tard, mais pourrait aider quelqu'un à trébucher sur cette question.)
Au lieu de dtAll = dtOne.Copy();
dans la réponse de Jeromy Irvine vous pouvez faire:
dtAll = new DataTable();
...
dtAll.Merge(dtOne);
dtAll.Merge(dtTwo);
dtAll.Merge(dtThree);
...
etc.
Cette technique est utile dans une boucle dans laquelle vous souhaitez fusionner des tables de données:
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);
Le paramètre TRUE préserve les modifications.
Pour plus de détails, consultez 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;
C'est ce que j'ai fait pour fusionner deux tables de données et lier le résultat final à 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();
}
}