2010-10-26 95 views

回答

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

上面示例假定​​和dataTable2具有相同的數量,類型和列的順序。

+8

這是不是結果。「該行已屬於 另一個表」 – McArthey 2012-06-06 19:59:20

+8

@McArthey不,它不會;正在從現有行中的值創建新行。該行本身不會被添加到其他DataTable中。 – 2012-06-07 00:31:19

+0

這導致「輸入數組長度超過此表中的列數」。 – Vinod 2012-10-21 11:46:38

14

嘗試這個

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); 
    } 
+0

答案很好,但性能下降。 – 2012-07-24 11:55:19

62

複製表指定行到另一

// 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); 
    } 
} 
8

檢查了這一點,你可能會喜歡它(之前,請克隆表1至表2):

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

或者:

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

下面的示例將是複製一行的最快方法。 根據列名稱正在複製每個單元格。 萬一你不需要一個特定的單元格複製,然後嘗試捕獲或添加如果。 如果您要複製多於一行然後循環下面的代碼。

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更改爲指定的行索引,或者如果要進入循環或將其變爲邏輯,則可以使用變量

4

受以下版本支持:4,3.5 SP1,現在可以在對象上調用方法。

DataTable dataTable2 = dataTable1.Copy() 
+0

從技術上講,這會創建一個數據表的副本。雖然在問題中沒有明確說明,但dataTable2可能已存在,並且其中有其他行,我們不想丟失。此外,該問題明確指出「特定行」,而這隻能處理所有行。 – Matt 2016-03-08 22:24:18

2

至於其他職位的結果,這是最短的,我可以得到:

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

這基本上是一個foreach。此外,您沒有按照OP的要求篩選條件。 – 2016-07-20 19:51:08

+0

現在,如果我清除'sourceTable',那麼'destTable'也會清除? – Si8 2017-02-20 15:00:53

+0

我希望能夠分配一個值並清除原始變量而不清除目標。 – Si8 2017-02-20 15:05:09

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

你的代碼對我來說很完美,是一個非常簡單的代碼,謝謝 – 2017-06-28 13:17:04

相關問題