Wie kann ich bestimmte Zeilen von DataTable in eine andere Datentabelle in c # kopieren? Es wird mehr als eine Reihe geben.
Antworten:
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);
}
}
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);
}
Probieren Sie es aus, es könnte Ihnen gefallen (vorher klonen Sie bitte Tabelle1 auf Tabelle2):
table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges);
Oder:
table1.AsEnumerable().Where ( yourcondition ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);
Unterstützt in: 4, 3.5 SP1, können Sie jetzt einfach eine Methode für das Objekt aufrufen.
DataTable dataTable2 = dataTable1.Copy()
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));
sourceTable
Willen räume, klärt sich das destTable
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
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
nach TABLE002
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.
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);
}
Um die gesamte Datentabelle zu kopieren, gehen Sie wie folgt vor:
DataGridView sourceGrid = this.dataGridView1;
DataGridView targetGrid = this.dataGridView2;
targetGrid.DataSource = sourceGrid.DataSource;