web-dev-qa-db-fra.com

Copier les lignes d'un Datatable dans un autre DataTable?

Comment puis-je copier des lignes spécifiques de DataTable vers un autre Datatable en c #? Il y aura plus d'une rangée.

135
kartal
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 même type et le même ordre de colonnes.

223
Bradley Smith

Copier les lignes spécifiées d'une table à 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);
   }
}
80
Rageesh G R

Essaye ça

    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);
    }
18
Zia

Regardez ceci, vous pouvez l’aimer (auparavant, clonez table1 à table2)

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

Ou:

table1.AsEnumerable().Where ( yourcondition  ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);
10
Estevez

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

DataTable dataTable2 = dataTable1.Copy()
9
mirtiger

À la suite des autres articles, 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));
4
Meiel

l’échantillon ci-dessous serait le moyen le plus rapide de copier une ligne . chaque cellule est copiée en fonction du nom de la colonne .. .. au cas où vous n’auriez pas besoin d’une cellule spécifique à copier, essayez-le ou ajoutez-le si .si vous allez copier plus d’une rangée, faites une boucle avec 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] .Rows [ 0 ] [i]; remplacez l'index 0 par votre index de rangée spécifié ou vous pouvez utiliser une variable si vous allez en boucle ou si sa va être logique

2
Chad Dumagas

Pour ceux qui veulent une requête SQL à commande unique pour cela:

INSERT INTO TABLE002 
(COL001_MEM_ID, COL002_MEM_NAME, COL002_MEM_ADD, COL002_CREATE_USER_C, COL002_CREATE_S)
SELECT COL001_MEM_ID, COL001_MEM_NAME, COL001_MEM_ADD, COL001_CREATE_USER_C, COL001_CREATE_S
FROM TABLE001;

Cette requête copie les données de TABLE001 à TABLE002 et nous supposons que les deux colonnes ont des noms de colonne différents.

Les noms de colonne sont mappés un par un, comme suit:

COL001_MEM_ID -> COL001_MEM_ID

COL001_MEM_NAME -> COL002_MEM_NAME

COL001_MEM_ADD -> COL002_MEM_ADD

COL001_CREATE_USER_C -> COL002_CREATE_USER_C

COL002_CREATE_S -> COL002_CREATE_S

Vous pouvez également spécifier la clause where, si vous avez besoin d'une condition.

1
Manisha
 private void CopyDataTable(DataTable table){
     // Create an object variable for the copy.
     DataTable copyDataTable;
     copyDataTable = table.Copy();
     // Insert code to work with the copy.
 }
1
user1599615

Pour copier des données complètes, procédez comme suit:

DataGridView sourceGrid = this.dataGridView1;
DataGridView targetGrid = this.dataGridView2;
targetGrid.DataSource = sourceGrid.DataSource;
0
Harun