RowNotInTableException при доступе во второй раз - PullRequest
0 голосов
/ 05 мая 2011

Я столкнулся с проблемой при попытке снова получить доступ к строке.

У меня есть компонент 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);
            }

        }

Затем я пытаюсь получить доступ к строке`s id:

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

Первый раз, когда все в порядке, но после того, как щелчок по событию срабатывает и загружает информацию о продукте во второй раз, я пытаюсь загрузить dataGridView по id из строки (тот же код выше) Я получаю ошибку:

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;
    }
...