有一些关于此的帖子,但经过几个小时的搜索后我仍然找不到我需要的东西。
下面帖子中的答案几乎让我得到了我想要的:DataGridView 中外键的组合框 https://stackoverflow.com/questions/2256924/combobox-for-foreign-key-in-datagridview
问题一:
离开产品具有多个许可证的示例,我的数据库映射都是多对一关系,这意味着我的许可证类保存对产品类的引用。 License 类没有 ProductId 属性,因为可以通过 Product 引用检索该属性。我不想为了使 UI 中的绑定更容易而同时引用 Product 和 ProductId 属性来搞乱 License 类。
因此我无法设置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:
如何显示每个产品的不同许可证列表?
换句话说,网格中每个产品的许可证组合框列表都将不同。我想使用数据绑定来执行此操作,这样我就不必自己获取和设置值。