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
avoir le même nombre, le même type et l'ordre des colonnes.
ItemArray
partie à la fin de l'expression. Assurez-vous d'ajouter les valeurs de la ligne et non la ligne elle-même.
DataTable.Clone
méthode: msdn.microsoft.com/en-us/library/…
Copier les lignes spécifiées d'une 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);
}
}
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);
}
Vérifiez ceci, vous aimerez peut-être (auparavant, veuillez cloner table1 en table2):
table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges);
Ou:
table1.AsEnumerable().Where ( yourcondition ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);
Pris en charge dans: 4, 3.5 SP1, vous pouvez maintenant simplement appeler une méthode sur l'objet.
DataTable dataTable2 = dataTable1.Copy()
À la suite des autres articles, c'est le plus court que je puisse obtenir:
DataTable destTable = sourceTable.Clone();
sourceTable.AsEnumerable().Where(row => /* condition */ ).ToList().ForEach(row => destTable.ImportRow(row));
sourceTable
testament, le sera destTable
aussi clair?
ci-dessous l'échantillon 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'avez pas besoin d'une cellule spécifique à copier, essayez de rattraper ou d'ajouter si. si vous allez copier plus d'une 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] .Rows [ 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
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 copiera les données de TABLE001
vers TABLE002
et nous supposons que les deux colonnes avaient des noms de colonnes différents.
Les noms de colonne sont mappés un à un comme:
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.
Pour copier tout le datatable, procédez comme suit:
DataGridView sourceGrid = this.dataGridView1;
DataGridView targetGrid = this.dataGridView2;
targetGrid.DataSource = sourceGrid.DataSource;
J'ai créé un moyen simple de résoudre ce problème
DataTable newTable = oldtable.Clone();
for (int i = 0; i < oldtable.Rows.Count; i++)
{
DataRow drNew = newTable.NewRow();
drNew.ItemArray = oldtable.Rows[i].ItemArray;
newTable.Rows.Add(drNew);
}