第二次访问时RowNotInTableException

时间:2011-05-05 16:03:33

标签: c# datagridview dataset

我在尝试再次访问行时遇到了问题。

我有TreeView组件,在Tag属性中我放置了来自datatable的行:

foreach (DataRow row in catalogDataSet.category)
        {
            if (row["parent"].ToString().Equals("0"))
            {
                TreeNode node = new TreeNode();
                node.Text = row["name"].ToString();
                node.Tag = row;
                string nodeId = row["id"].ToString();
                if (this.HasChilds(nodeId))
                {
                    this.fillChilds(nodeId, node);
                }
                tree.Nodes.Add(node);
            }

        }

然后我尝试访问row的id:

int locationId = int.Parse(((DataRow)locationTreeView.SelectedNode.Tag)["id"].ToString());

第一次没关系,但是在事件点击后第二次将产品的信息加载到面板中我尝试从行加载dataGridView(上面的代码相同)我得到错误:

  

RowNotInTableException:

     

此行已从表中删除,但没有任何数据。   BeginEdit()将允许创建新的   这一行中的数据。

public Panel GetPreviewPanel(int productId)
    {
        InitializeComponent();
        tableLayoutPanel4.Controls.Add(this.closeButton, 2, 0);
        categoryApi.FillComboBox(this.categoryComboBox);
        warehouseApi.FillWarehouseCombobox(this.warehouseComboBox);
        warehouseComboBox.SelectionChangeCommitted += new EventHandler(LocationComboBoxSelectionChangeCommitted);
        label.Text = "Peržiūrėti prekę";
        //fill locations with loaded warehouse value
        locationApi.FillLocationComboboxByWarehouse(this.locationComboBox, (int)((ComboItem)this.warehouseComboBox.SelectedItem).Value);
        categoryComboBox.SelectionChangeCommitted += new EventHandler(CategoryComboBoxSelectionChangeCommitted);
        //setting default values
        CatalogDataSet.productRow product = productApi.GetProductData(productId);
        if (product == null)
            return null;
        productNameTextBox.Text = product["name"].ToString();
        productNameTextBox.Enabled = false;
        return this.productPanel;
    }

0 个答案:

没有答案