Risposte:
foreach (DataRow dr in dataTable1.Rows) {
if (/* some condition */)
dataTable2.Rows.Add(dr.ItemArray);
}
L'esempio sopra presuppone che dataTable1
e dataTable2
hanno lo stesso numero, il tipo e l'ordine delle colonne.
ItemArray
parte alla fine dell'espressione. Assicurati di aggiungere i valori della riga, non la riga stessa.
DataTable.Clone
metodo: msdn.microsoft.com/en-us/library/…
Copia le righe specificate dalla tabella a un'altra
// 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);
}
}
Prova questo
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);
}
Dai un'occhiata, potrebbe piacerti (prima, per favore, clona da table1 a table2):
table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges);
O:
table1.AsEnumerable().Where ( yourcondition ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);
Supportato in: 4, 3.5 SP1, ora puoi semplicemente chiamare un metodo sull'oggetto.
DataTable dataTable2 = dataTable1.Copy()
Come risultato degli altri post, questo è il più breve che ho potuto ottenere:
DataTable destTable = sourceTable.Clone();
sourceTable.AsEnumerable().Where(row => /* condition */ ).ToList().ForEach(row => destTable.ImportRow(row));
sourceTable
sarà destTable
chiaro anche?
sotto esempio sarebbe il modo più veloce per copiare una riga. ogni cella viene copiata in base al nome della colonna. nel caso in cui non sia necessario copiare una cella specifica, provare a catturare o aggiungere if. se hai intenzione di copiare più di 1 riga, esegui il ciclo seguente del codice.
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]; cambia l'indice 0 nell'indice di riga specificato oppure puoi utilizzare una variabile se esegui il ciclo o se sarà logico
Per chi desidera una query SQL a comando singolo per questo:
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;
Questa query copierà i dati da TABLE001
a TABLE002
e supponiamo che entrambe le colonne abbiano nomi di colonna diversi.
I nomi delle colonne sono mappati uno a uno come:
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
Puoi anche specificare dove clausola, se hai bisogno di qualche condizione.
Per copiare l'intero datatable basta fare questo:
DataGridView sourceGrid = this.dataGridView1;
DataGridView targetGrid = this.dataGridView2;
targetGrid.DataSource = sourceGrid.DataSource;
Ho creato un modo semplice per risolvere questo problema
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);
}