我有一个数据表说dt1(它不断改变它的循环内部)。我有另一个数据表说dt2(最初是null)。现在我必须在dt2中附加dt1的行。我尝试使用Merge(),但之前的dt2行正在消失。 任何想法怎么做??
答案 0 :(得分:1)
根据你的代码,我看到你正在使用dt2 = dt1.Clone(); 这是擦除dt2中的所有内容,所以你只是将dt1的当前内容添加到dt2。
您应该将dt1的内容合并到dt2。
,而不是克隆答案 1 :(得分:1)
使用ImportRow
方法,如下所示:
var table2 = new DataTable();
foreach(DataRow row in table1.Rows)
table2.ImportRow(row);
答案 2 :(得分: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);
答案 3 :(得分:1)
JoãoAngelo的答案的另一个衍生物是提前初始化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);
}
答案 4 :(得分:0)
这个怎么样:
DataRow[] rows = new DataRow[dt1.Rows.Count];
dt1.Rows.CopyTo(rows, 0);
foreach (DataRow row in rows)
{
dt2.Rows.Add(row);
}
答案 5 :(得分:0)
我假设你的桌子有相同的结构
foreach (DataRow row in dt1.Rows)
dt2.Rows.Add(row.ItemArray);