如何在数据表中添加一行?

3

我有一个数据表,称为dt1(在循环中不断变化)。我还有另一个数据表,称为dt2(最初为空)。现在我需要将dt1的行追加到dt2中。我尝试使用Merge(),但是dt2的先前行消失了。有什么办法可以解决这个问题吗?

6个回答

1
使用ImportRow方法,如下所示:
var table2 = new DataTable();

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

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);

1

对于João Angelo的答案,另一个派生方法是预先初始化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);
}

1
根据您的代码,我看到您正在使用dt2 = dt1.Clone(); 这将擦除dt2中的所有内容,因此您只会将dt1的当前内容添加到dt2中。
相反,您应该合并dt1的内容到dt2中,而不是克隆。

对于第一个情况,我收到了错误(对象引用未设置为对象实例)。 对于dt2.Merge(dt1,true),先前的行将在后续合并函数中被删除。 - Avi
你能否在问题中粘贴一些代码,这样我们就可以看到发生了什么?因为我的答案通常应该有效。 - Webleeuw

0
这个怎么样?
  DataRow[] rows = new DataRow[dt1.Rows.Count];
  dt1.Rows.CopyTo(rows, 0);
  foreach (DataRow row in rows)
  {
    dt2.Rows.Add(row);
  }

0

我假设你的表具有相同的结构

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接