Я столкнулся с проблемой при попытке снова получить доступ к строке.
У меня есть компонент 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;
}