Есть несколько сообщений об этом, но после нескольких часов поиска я все еще не могу найти то, что мне нужно.
Ответ в следующем посте почти дает мне то, что я хочу: Combobox дляВнешний ключ в DataGridView
Вопрос 1:
Если исходить из того примера, когда у продукта много лицензий, все сопоставления моей базы данных являются отношениями "многие к одному".Это означает, что мой класс License содержит ссылку на класс Product.Класс License не имеет свойства для ProductId, поскольку его можно получить с помощью ссылки на Product.Я не хочу портить класс License и ссылкой на Product, и на свойство ProductId, чтобы упростить привязку в пользовательском интерфейсе.
Из-за этого я не могу установить DataPropertyName
вПоле идентификатора.Это должно быть имя ссылки на класс, например, так:
DataGridViewComboBoxColumn dataGridViewComboBoxColumn =
(DataGridViewComboBoxColumn)myDataGridView.Columns("LicenseComboBoxColumn");
dataGridViewComboBoxColumn.DataPropertyName = "License"; // not LicenseID
**** Обновление **** Я смог заставить это работать частично без создания свойства ProductId, указав Product.Id какDataPropertyName, например, так:
dataGridViewComboBoxColumn.DataPropertyName = "License.Id";
Однако при этом он нарушил привязку данных, что заставило меня вручную получить и установить значение ячейки.
Я также видел сообщения о привязке кячейка DataGridView, но привязка данных прерывается, когда я это делаю, а сам источник данных никогда не обновляется:
// populate the combo box with Products for each License
foreach (DataGridViewRow row in myDataGridViewProducts.Rows)
{
IProduct myProduct = row.DataBoundItem as IProduct;
DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)row.Cells("myProductCol");
cell.DataSource = getListOfILicenseObjectsFromDao(myProduct.Id);
cell.Value = myProduct.License.Id;
}
Возможно, я делаю что-то не так, или, может быть, есть другой способ.Кто-нибудь может здесь помочь?
Вопрос 2:
Как отобразить другой список лицензий для каждого продукта?Другими словами, список лицензий в выпадающем списке будет отличаться для каждого продукта в сетке.Я хотел бы сделать это с помощью привязки данных, поэтому мне не нужно самому получать и устанавливать значения.