web-dev-qa-db-ja.com

あるDatatableから別のDataTableに行をコピーしますか?

DataTableからc#の別のDatatableに特定の行をコピーする方法を教えてください。複数の行があります。

142
kartal
foreach (DataRow dr in dataTable1.Rows) {
    if (/* some condition */)
        dataTable2.Rows.Add(dr.ItemArray);
}

上記の例では、dataTable1dataTable2が同じ列の数、型、および順序を持つと仮定しています。

231
Bradley Smith

特定の行をテーブルから別の行にコピーする

// 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);
   }
}
87
Rageesh G R

これを試して

    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);
    }
18
Zia

これをチェックしてください、あなたはそれを好むかもしれません(以前は、table1をtable2に複製してください):

table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges);

または

table1.AsEnumerable().Where ( yourcondition  ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);
12
Estevez

でサポートされています:4、3.5 SP1、あなたは今すぐオブジェクトのメソッドを呼び出すことができます。

DataTable dataTable2 = dataTable1.Copy()
10
mirtiger

他の記事の結果として、これは私が得ることができる最短です:

DataTable destTable = sourceTable.Clone();
sourceTable.AsEnumerable().Where(row => /* condition */ ).ToList().ForEach(row => destTable.ImportRow(row));
5
Meiel

以下のサンプルは、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を指定した行インデックスに変更するか、ループする場合や論理的になる場合は変数を使用できます。

2
Chad Dumagas

そのための単一コマンド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句を指定することもできます。

1
Manisha
 private void CopyDataTable(DataTable table){
     // Create an object variable for the copy.
     DataTable copyDataTable;
     copyDataTable = table.Copy();
     // Insert code to work with the copy.
 }
1
user1599615

データテーブル全体をコピーするには、次のようにします。

DataGridView sourceGrid = this.dataGridView1;
DataGridView targetGrid = this.dataGridView2;
targetGrid.DataSource = sourceGrid.DataSource;
0
Harun