Не обязательно;Вы можете просто извлечь текущую строку из сетки всякий раз, когда событие запускается, чтобы указать, что текущая строка изменилась, а затем извлечь идентификатор поставщика из базовой строки. Однако в таких ситуациях я предпочитаю использовать BindingSource и подключиться к событию CurrentChanged .
Вы окажете большую услугу, если добавите строго типизированный набор данных в свойпроект, подключите его к вашей базе данных и используйте табличные адаптеры и типизированные таблицы данных. После того, как вы выполнили этот шаг (добавьте новый набор данных в проект, откройте его, щелкните правой кнопкой мыши поверхность и выберите новый табличный адаптер, заполните детали подключения и select * from supplers
, повторите для продуктов), вы можете открыть окно Источники данных,перетащите узлы «Поставщики» и «Продукты» в форму, и вы получите сеточное представление для каждого из них, связанное через источник связывания с одним экземпляром набора данных, который имеет обе таблицы. Затем вы можете закодировать этот обработчик события в ProductBindingSource:
private void ProductBindingSource_CurrentChanged(object sender, EventArgs e)
{
if(ProductBindingSource.Current == null) return;
var pr = (ProductBindingSource.Current as DataRowView).Row as MyDataSetName.ProductsRow;
var ta = new SuppliersTableAdapter(); //you might even have a suppliersTableAdapter on the form; no need to make a new one if this is the case
ta.Fill(dataset1.Suppliers, pr.SupplierID);
}