web-dev-qa-db-fra.com

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);
45
Xaisoft

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);
87
Jeromy Irvine

(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);
}
32
SNag
dtAll = dtOne.Copy();
dtAll.Merge(dtTwo,true);

Le paramètre TRUE préserve les modifications.

Pour plus de détails, consultez MSDN .

11
Sagar Reddy
DataTable dtAll = new DataTable();
DataTable dt= new DataTable();
foreach (int id in lst)
{
    dt.Merge(GetDataTableByID(id)); // Get Data Methode return DataTable
}
dtAll = dt;
1
rami220

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();

            }
        }
0
anand360