Copier des lignes d'un Datatable à un autre DataTable?

Comment puis-je copier des lignes spécifiques de DataTable vers une autre Datable en c#? Il n'y aura plus qu'une seule ligne.

127
demandé sur MatthewMartin 2010-10-26 06:31:56

8 réponses

foreach (DataRow dr in dataTable1.Rows) {
    if (/* some condition */)
        dataTable2.Rows.Add(dr.ItemArray);
}

L'exemple ci-dessus suppose que dataTable1 et dataTable2 ont le même nombre, le type et l'ordre des colonnes.

207
répondu Bradley Smith 2010-10-26 02:36:34

Copie les lignes spécifiées de la Table vers une autre

// here dttablenew is a new Table  and dttableOld is table Which having the data 

dttableNew  = dttableOld.Clone();  

foreach (DataRow drtableOld in dttableOld.Rows)
{
   if (/*put some Condition */)
   {
      dtTableNew.ImportRow(drtableOld);
   }
}
74
répondu Rageesh G R 2012-10-29 06:59:51

Essayez Ceci

    String matchString="ID0001"//assuming we have to find rows having key=ID0001
    DataTable dtTarget = new DataTable();
    dtTarget = dtSource.Clone();
    DataRow[] rowsToCopy;
    rowsToCopy = dtSource.Select("key='" + matchString + "'");
    foreach (DataRow temp in rowsToCopy)
    {
        dtTarget.ImportRow(temp);
    }
16
répondu Zia 2011-12-16 07:22:18

Vérifiez ceci, vous pouvez l'aimer (auparavant, veuillez cloner table1 à table2):

table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges);

Ou:

table1.AsEnumerable().Where ( yourcondition  ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);
9
répondu Estevez 2012-11-08 17:06:35

Pris en charge dans: 4, 3.5 SP1, vous pouvez maintenant appeler une méthode sur l'objet.

DataTable dataTable2 = dataTable1.Copy()
7
répondu mirtiger 2017-10-20 17:46:38

À la suite des autres messages, c'est le plus court que j'ai pu obtenir:

DataTable destTable = sourceTable.Clone();
sourceTable.AsEnumerable().Where(row => /* condition */ ).ToList().ForEach(row => destTable.ImportRow(row));
2
répondu Meiel 2016-07-21 08:43:31

L'exemple ci-dessous serait le moyen le plus rapide de copier une ligne. chaque cellule est copiée en fonction du nom de la colonne. dans le cas où vous n'avez pas besoin d'une cellule spécifique à copier, essayez catch ou ajoutez if. si vous allez copier plus de 1 ligne, bouclez le code ci-dessous.

DataRow dr = dataset1.Tables[0].NewRow();
for (int i = 0; i < dataset1.Tables[1].Columns.Count; i++)
{
    dr[dataset1.Tables[1].Columns[i].ColumnName] = dataset1.Tables[1].Rows[0][i];
}

datasetReport.Tables[0].Rows.Add(dr);

Dataset1.Tables[1].Lignes[0][I]; changez l'index 0 en votre index de ligne spécifié ou vous pouvez utiliser une variable si vous allez en boucle ou si cela va être logique

1
répondu Chad Dumagas 2014-01-03 06:06:33
 private void CopyDataTable(DataTable table){
     // Create an object variable for the copy.
     DataTable copyDataTable;
     copyDataTable = table.Copy();
     // Insert code to work with the copy.
 }
0
répondu Roopendra 2017-01-04 09:50:59