为什么我在下面的代码中收到错误 Datatable named "Items" already belongs to this dataset
?只有当我尝试在((x > 1) || (x == 1))
处添加值时,才会出现此错误。我可以成功创建多个新的“Item”数据表,然后将它们添加到while循环中的ds数据集,但是尝试将多个“AItem”数据表添加到AllItems数据集会导致错误。这些数据集之间的唯一区别是ds数据集中添加了许多其他数据表,这些数据表具有从SQL数据库填充它们的数据适配器。
DataSet AllItems = new DataSet("Items");
DataSet ds = new DataSet("Header");
foreach (DataRow fieldRow in myDataset.Tables["tempTable"].AsEnumerable())
{
while (x < 1)
{
x++;
DataTable Item = new DataTable("Item");
Item.Columns.Add("ID");
Item.Columns.Add("LineNumber");
Item.Columns.Add("ItemID");
Item.Columns.Add("UnitPrice");
Item.Columns.Add("Description");
Item.Columns.Add("OrderUOM");
Item.Columns.Add("OrderQty");
DataRow aItem = Item.NewRow();
Item["ID"] = 1.ToString();
Item["LineNumber"] = x;
Item["ItemID"] = fieldRow[0].ToString();
Item["UnitPrice"] = fieldRow[1].ToString();
Item["Description"] = fieldRow[2].ToString();
Item["OrderUOM"] = fieldRow[3].ToString();
Item["OrderQty"] = fieldRow[4].ToString();
Item.Rows.Add(aItem);
ds.Tables.Add(Item);
}
if ((x > 1) || (x == 1))
{
DataTable AItem = new DataTable("AItem");
Item.Columns.Add("ID");
Item.Columns.Add("LineNumber");
Item.Columns.Add("ItemID");
Item.Columns.Add("UnitPrice");
Item.Columns.Add("Description");
Item.Columns.Add("OrderUOM");
Item.Columns.Add("OrderQty");
DataRow aItem = Item.NewRow();
Item["ID"] = 1.ToString();
Item["LineNumber"] = x;
Item["ItemID"] = fieldRow[0].ToString();
Item["UnitPrice"] = fieldRow[1].ToString();
Item["Description"] = fieldRow[2].ToString();
Item["OrderUOM"] = fieldRow[3].ToString();
Item["OrderQty"] = fieldRow[4].ToString();
Item.Rows.Add(aItem);
AllItems.Tables.Add(AItem);
}
}
答案 0 :(得分:2)
我不确定这是您唯一的问题,但您使用的是DataTable
,就好像它是DataRow
一样。 Item
是表,它没有字符串索引器,所以替换
DataRow aItem = Item.NewRow();
Item["ID"] = 1.ToString();
Item["LineNumber"] = x;
Item["ItemID"] = fieldRow[0].ToString();
Item["UnitPrice"] = fieldRow[1].ToString();
Item["Description"] = fieldRow[2].ToString();
Item["OrderUOM"] = fieldRow[3].ToString();
Item["OrderQty"] = fieldRow[4].ToString();
Item.Rows.Add(aItem);
与
DataRow aItem = Item.NewRow();
aItem["ID"] = 1.ToString();
aItem["LineNumber"] = x;
aItem["ItemID"] = fieldRow[0].ToString();
aItem["UnitPrice"] = fieldRow[1].ToString();
aItem["Description"] = fieldRow[2].ToString();
aItem["OrderUOM"] = fieldRow[3].ToString();
aItem["OrderQty"] = fieldRow[4].ToString();
Item.Rows.Add(aItem);
但我认为这只是下一个错误,&#34;名为“Items”的数据表已经属于这个数据集&#34;因为要将表添加到具有与另一个表相同名称的DataSet
的表而被抛出。您正在添加具有静态名称&#34; AItem&#34;在循环中:
foreach (DataRow fieldRow in myDataset.Tables["tempTable"].AsEnumerable())
{
// ...
DataTable AItem = new DataTable("AItem");
// ...
AllItems.Tables.Add(AItem);
// ...
}
我不理解逻辑,也许它足以使用没有名称的默认构造函数。