有一些关于这个的帖子,但经过几个小时的搜索,我仍然找不到我需要的东西。
以下帖子中的答案几乎让我得到了我想要的: Combobox for Foreign Key in DataGridView
问题一:
从产品具有许多许可证的示例开始,我的数据库映射都是多对一的关系,这意味着我的许可证类包含对产品类的引用。License 类没有 ProductId 的属性,因为可以通过 Product 引用检索该属性。我不想用对 Product 和 ProductId 属性的引用来混淆 License 类,只是为了使 UI 中的绑定更容易。
因此,我无法将其设置DataPropertyName
为 Id 字段。它必须是类引用名称,如下所示:
DataGridViewComboBoxColumn dataGridViewComboBoxColumn =
(DataGridViewComboBoxColumn)myDataGridView.Columns("LicenseComboBoxColumn");
dataGridViewComboBoxColumn.DataPropertyName = "License"; // not LicenseID
****更新**** 我能够通过将 Product.Id 指定为 DataPropertyName 来使其部分工作而无需创建 ProductId 属性,如下所示:
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:
如何为每个产品显示不同的许可证列表?换句话说,许可证的组合框列表对于网格中的每个产品都是不同的。我想使用数据绑定来做到这一点,所以我不必自己获取和设置值。