2009-12-03 123 views
3

我有一個datatable說dt1(它不斷改變其內循環)。我有另一個datatable說dt2(最初它爲空)。現在我必須在dt2中追加dt1的行。我嘗試使用Merge(),但之前的dt2行正在消失。 任何想法如何做到這一點??如何在數據表中添加行?

回答

1

你正在清理每次循環運行時都會有dt2表。試試這個:

DataTable dt1 = null; DataTable dt2 = null; 

for (int i = 0; i < dt3.Rows.Count; i++) 
{ 

    // here "strSQL" is build which changes on the "i" value     

    dt1 = GetDataTable(strSQL); // this returns a table with single Row 

    if(dt2 == null) 
    { 
     dt2 = dt1.Clone(); 
    } 

    dt2.Merge(dt1,true); 
} 

而且,如果應用到主鍵列基於i查詢的限制,你可以使用

dt2.ImportRow(dt1.Rows[0]); 

,而不是

dt2.Merge(dt1,true); 
+0

合併工作正常。 – Avi 2009-12-04 04:24:26

1

根據你的代碼,我看到你正在使用dt2 = dt1.Clone(); 這是刪除dt2中的所有內容,因此您只將dt1的當前內容添加到dt2。

而不是克隆你應該合併dt1的內容到dt2。

+0

對於firstcase我得到錯誤(對象引用未設置爲對象的實例。)。 對於dt2.Merge(dt1,true),前面的行在後續合併函數中被刪除。 – Avi 2009-12-03 14:03:21

+0

你可能會在你的問題中粘貼一些代碼,以便我們看到發生了什麼?因爲我的答案通常應該工作。 – Webleeuw 2009-12-03 14:07:31

0

這個什麼:

DataRow[] rows = new DataRow[dt1.Rows.Count]; 
    dt1.Rows.CopyTo(rows, 0); 
    foreach (DataRow row in rows) 
    { 
    dt2.Rows.Add(row); 
    } 
+0

這不起作用。 – SLaks 2009-12-03 13:59:31

+0

哦,我很抱歉,我想它會工作。 – martin 2009-12-03 14:42:10

1

使用ImportRow方法,像這樣:

var table2 = new DataTable(); 

foreach(DataRow row in table1.Rows) 
    table2.ImportRow(row); 
0

我假設你的表具有相同的結構

foreach (DataRow row in dt1.Rows) 
    dt2.Rows.Add(row.ItemArray); 
1

另一個衍生物若昂·安傑洛的答案將是提前初始化dt2,然後您可以刪除空檢查

DataTable dt1 = null; DataTable dt2 = new DataTable(); 

for (int i = 0; i < dt3.Rows.Count; i++) 
{ 

    // here "strSQL" is build which changes on the "i" value     

    dt1 = GetDataTable(strSQL); // this returns a table with single Row 

    dt2.Merge(dt1,true); 
} 
相關問題