2009-12-03 226 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); 
}