错误:数据表命名"项目"已经属于这个数据集

时间:2014-12-10 09:01:56

标签: c# datatable dataset

为什么我在下面的代码中收到错误 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);
    }
}

1 个答案:

答案 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);
    // ...
}

我不理解逻辑,也许它足以使用没有名称的默认构造函数。