DataSet dsUdpated = new DataSet()
DataTable dtUpdated = dsUpdated.Tables.Add();
dtUpdated = dsOriginal.Tables[0].Clone(); // Guarenteed ds.Tables[0] has rows
dsUpdate.Tables[0].ImportRow(row); // row is one of the filtered row in
但是ImportRow似乎没有添加行! dsUpdate.Tables [0]不包含该行。但是添加了一行。请帮忙!
答案 0 :(得分:3)
这就是你做错了。
DataTable dtUpdated = dsUpdated.Tables.Add();
dtUpdated = dsOriginal.Tables[0].Clone();
在第一行中,您声明对象并将其初始化为DataSet的Tables集合上的Add
操作的结果。在第二行中,您将完全设置为其他内容!
dtUpdated
可以很好地引用内存中与dsUpdated.Tables[0]
相同的对象,但变量本身不是对该对象的常量引用。实际上,在第二行中,您已将其设置为另一个对象,即另一个表的Clone()
方法的结果。如果变量曾指向与dsUpdated.Tables[0]
相同的对象,则它不再存在。它类似于陈述
int x = 5;
x = 6;
在第一行中,x
的值为5.在第二行中,您已将该值替换为6.类似地,对于表变量,该值是引用。您已将一个引用替换为另一个引用。有意义吗?
首先克隆表格,然后将该表格添加到数据集中。现在dsUpdated.Tables[0]
将包含dsOriginal.Tables[0]
的克隆结构,您的导入应该按预期工作。
答案 1 :(得分:2)
请试试这个:
DataTable dt=dsOriginal.Tables[0].Clone();
dsUpdated.Tables.Add(dt);
DataTable dtUpdated=dt;
答案 2 :(得分:0)
请先克隆DataTable
。
DataTable dt=table.Clone();
foreach (DataRow row in table.Select("AirAvail_Id=0"))
{
dtAirAvail.ImportRow(row);
}
这样可以正常工作。