使用datatable.Rows.Add(dRow)时出错

时间:2014-08-04 10:42:29

标签: c# sql datatable

我有一个数据表,在某些条件下需要将一些行复制到新数据表。我的语句如下所示。

dt1 = ds1.Tables[0];
DataRow[] dRows = dt1.Select("IS_ALLOWED=" + false);
for (int i = 0; i < dRows.Length; i++)
{
   dtPerm.Rows.Add(dRows[i]);  //------(1)   
   //dtPerm.ImportRow(dRows[i]);  //------(2)   
}

但是从------(1)调试时。它跳起来抓住。

是个例外
"This row already belongs to another table."

----(2)没有出现任何错误且Rows没有添加,但该行为空且只有一列。

有没有解决方案。

2 个答案:

答案 0 :(得分:1)

for循环修改为以下内容:

 foreach (DataRow row in dRows)
   {
       dtPerm.ImportRow(row);
   }

在将行添加到DataTable之前,请确保已使列存储行值。看到这段代码:

 DataTable dtPerm = new DataTable();
 dtPerm.Columns.Add("Column1");
 dtPerm.Columns.Add("Column2");
 dtPerm.Columns.Add("Column3");
 dtPerm.Columns.Add("Column4");
 dtPerm.Columns.Add("Column5");

在此之后,放置上面显示的for循环,这将正常工作。

希望这有帮助。

答案 1 :(得分:0)

谢谢大家。我在循环开始上面添加了一条语句并修改了循环内的代码,现在它正常工作

dt1 = ds1.Tables[0];
dtPerm = dt1.Clone();
DataRow[] dRows = dt1.Select("IS_ALLOWED=" + false);
for (int i = 0; i < dRows.Length; i++)
{
   dtPerm.ImportRow(dRows[i]);  //------(2)   
}