Wie kann ich bestimmte Zeilen von DataTable in eine andere Datentabelle in c # kopieren? Es wird mehr als eine Reihe geben.
168
foreach (DataRow dr in dataTable1.Rows) {
if (/* some condition */)
dataTable2.Rows.Add(dr.ItemArray);
}
Das obige Beispiel nimmt an, dass dataTable1
und dataTable2
die gleiche Anzahl, Art und Reihenfolge der Spalten.
ItemArray
Teil am Ende des Ausdrucks weglassen würden . Stellen Sie sicher, dass Sie die Werte der Zeile hinzufügen, nicht die Zeile selbst.DataTable.Clone
Methode finden Sie in der MSDN-Dokumentation : msdn.microsoft.com/en-us/library/…Kopieren Sie die angegebenen Zeilen aus der Tabelle in eine andere
// 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); } }
quelle
Versuche dies
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); }
quelle
Probieren Sie es aus, es könnte Ihnen gefallen (vorher klonen Sie bitte Tabelle1 auf Tabelle2):
Oder:
quelle
Unterstützt in: 4, 3.5 SP1, können Sie jetzt einfach eine Methode für das Objekt aufrufen.
quelle
Aufgrund der anderen Beiträge ist dies der kürzeste, den ich bekommen konnte:
DataTable destTable = sourceTable.Clone(); sourceTable.AsEnumerable().Where(row => /* condition */ ).ToList().ForEach(row => destTable.ImportRow(row));
quelle
sourceTable
Willen räume, klärt sich dasdestTable
auch?Das folgende Beispiel ist der schnellste Weg, um eine Zeile zu kopieren. Jede Zelle wird basierend auf dem Spaltennamen kopiert. Wenn Sie zum Kopieren keine bestimmte Zelle benötigen, versuchen Sie es mit catch oder fügen Sie if hinzu. Wenn Sie mehr als eine Zeile kopieren möchten, wiederholen Sie den folgenden Code.
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]; Ändern Sie den Index 0 in den angegebenen Zeilenindex, oder Sie können eine Variable verwenden, wenn Sie eine Schleife ausführen oder wenn diese logisch ist
quelle
private void CopyDataTable(DataTable table){ // Create an object variable for the copy. DataTable copyDataTable; copyDataTable = table.Copy(); // Insert code to work with the copy. }
quelle
Für diejenigen, die eine SQL-Abfrage mit einem Befehl wünschen:
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;
Diese Abfrage kopiert Daten von
TABLE001
nachTABLE002
und wir gehen davon aus, dass beide Spalten unterschiedliche Spaltennamen hatten.Spaltennamen werden eins zu eins wie folgt zugeordnet:
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
Sie können auch die where-Klausel angeben, wenn Sie eine Bedingung benötigen.
quelle
Ich habe einen einfachen Weg gefunden, um dieses Problem zu lösen
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); }
quelle
Um die gesamte Datentabelle zu kopieren, gehen Sie wie folgt vor:
DataGridView sourceGrid = this.dataGridView1; DataGridView targetGrid = this.dataGridView2; targetGrid.DataSource = sourceGrid.DataSource;
quelle