尝试添加行时,此行已经属于另一个表错误?

Xai*_*oft 187 c#

我有一个DataTable,它有一些行,我使用select来过滤行以获取DataRows的集合,然后我使用foreach循环并将其添加到另一个DataTable,但它给了我错误"This Row已经属于到另一张桌子".这是代码:

DataTable dt = (DataTable)Session["dtAllOrders"];
DataTable dtSpecificOrders = new DataTable();

DataRow[] orderRows = dt.Select("CustomerID = 2");

foreach (DataRow dr in orderRows)
{
    dtSpecificOrders.Rows.Add(dr); //Error thrown here.
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*rke 323

您需要Row使用第一个值创建一个新的dr.A DataRow只能属于一个DataTable.

您还可以使用Add带有一组值的数据:

myTable.Rows.Add(dr.ItemArray)
Run Code Online (Sandbox Code Playgroud)

或者甚至更好:

// This works because the row was added to the original table.
myTable.ImportRow(dr);

// The following won't work. No data will be added or exception thrown.
var drFail = dt.NewRow()
drFail["CustomerID"] = "[Your data here]";
// dt.Rows.Add(row); // Uncomment for import to succeed.
myTable.ImportRow(drFail);
Run Code Online (Sandbox Code Playgroud)

  • 我可以使用ImportRow作为alernative吗?为什么.NET不允许你为不同的DataTable拥有相同的DataRow?这是设计的吗? (6认同)
  • 嘿,我刚刚意识到ImportRow,编辑我的答案,你们都打败了我.但是我会推荐这种方法,因为它会为你复制行 (3认同)
  • `ImportRow` din为我工作.但是添加行了!Thanksssssssssss (2认同)
  • `.ImportRow()` 对我不起作用,因为我最初没有执行 `.Clone()` 或在我的新 DataTable 上创建列。当我查看新表上的 `.Rows.Count` 时,结果为 0。由于我需要在我的表上创建列并添加它们,我只是创建了一个 `NewRow()` 语句,并将我的值直接添加到该新行上的列中,然后将该行添加到我的表中,在循环内(见下面我的回答)。 (2认同)

小智 28

试试这个:

DataTable dt = (DataTable)Session["dtAllOrders"];
DataTable dtSpecificOrders = dt.Clone();

DataRow[] orderRows = dt.Select("CustomerID = 2");

foreach (DataRow dr in orderRows)
{
    dtSpecificOrders.ImportRow(dr);
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你...虽然@JoshBerke提供的答案是正确的,你需要克隆原始表,就像你的例子一样,它可以工作. (3认同)

jer*_*oft 8

yourTable.ImportRow(dataRow);
Run Code Online (Sandbox Code Playgroud)

这是因为你要复制的行不一样TableName:

例如,尝试:

Table1.TableName = "Table1";
Table2.TableName = "Table2";
Run Code Online (Sandbox Code Playgroud)