DataTableからc#の別のDatatableに特定の行をコピーする方法を教えてください。複数の行があります。
foreach (DataRow dr in dataTable1.Rows) {
if (/* some condition */)
dataTable2.Rows.Add(dr.ItemArray);
}
上記の例では、dataTable1
とdataTable2
が同じ列の数、型、および順序を持つと仮定しています。
特定の行をテーブルから別の行にコピーする
// 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);
}
}
これを試して
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);
}
これをチェックしてください、あなたはそれを好むかもしれません(以前は、table1をtable2に複製してください):
table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges);
または
table1.AsEnumerable().Where ( yourcondition ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);
でサポートされています:4、3.5 SP1、あなたは今すぐオブジェクトのメソッドを呼び出すことができます。
DataTable dataTable2 = dataTable1.Copy()
他の記事の結果として、これは私が得ることができる最短です:
DataTable destTable = sourceTable.Clone();
sourceTable.AsEnumerable().Where(row => /* condition */ ).ToList().ForEach(row => destTable.ImportRow(row));
以下のサンプルは、1行をコピーする最も速い方法です。各セルは列名に基づいてコピーされています。あなたがコピーするために特定のセルを必要としない場合は、try catchまたはifを追加してください。あなたが複数の行をコピーしようとしているなら、それから以下のコードをループしてください。
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 [] [i];インデックス0を指定した行インデックスに変更するか、ループする場合や論理的になる場合は変数を使用できます。
そのための単一コマンドSQLクエリが必要な人のために:
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;
このクエリはTABLE001
からTABLE002
にデータをコピーします、そして我々は両方の列が異なる列名を持っていたと仮定します。
列名は、次のように1対1でマッピングされています。
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
何らかの条件が必要な場合は、where句を指定することもできます。
private void CopyDataTable(DataTable table){
// Create an object variable for the copy.
DataTable copyDataTable;
copyDataTable = table.Copy();
// Insert code to work with the copy.
}
データテーブル全体をコピーするには、次のようにします。
DataGridView sourceGrid = this.dataGridView1;
DataGridView targetGrid = this.dataGridView2;
targetGrid.DataSource = sourceGrid.DataSource;