我有一个数据库,包含两个表,产品和许可证。 Licences.ProductID 有外键引用 Products.ProductID (即该产品的许可证)。
Licences.ProductID
Products.ProductID
如何在WinForms DataGridView中表示这种关系?
当输入DataGridView(SQL Metal和通过LINQ to SQL)productlicenses.ProductID时,它会自动生成一个包含文本字段的列,该文本字段应为“Product”(当然我不能输入……)。
如何更改此列以包含列出可用产品的组合框?
我有一个连接(继承自 Linq.DataContext ),分配给DataGridView的数据源是 Link.IQueryable ,生成如下:
Linq.DataContext
Link.IQueryable
var ds = from c in m_connection.Licences select c;
在本例中,您试图模仿的行为是一个查找组合。你不想使用 Product 磁场 License 同学们,你们真的想用 ProductID 领域
Product
License
ProductID
下面是一个快速的步骤:
网格中的列;只保留 产品ID
产品ID
产品ID ColumnType 属性到 DataGridViewComboBox列 .
ColumnType
更改此列的 DataSource BindingSource 与 MyProject.Product (您只需遵循向导,可能与对网格本身执行向导的方式相同,但使用 而不是
DataSource
BindingSource
MyProject.Product
DisplayMember ProductName .
DisplayMember
ProductName
更改 ValueMember 产品ID .
ValueMember
填充 GridView productsBindingSource 使用产品数据,即 productBindingSource.DataSource = context.Products;
GridView
productsBindingSource
productBindingSource.DataSource = context.Products;
就这样。现在当你 SubmitChanges (假设你保留了 DataContext 产品ID 产品 DataContext.Refresh 先用这个方法。但是不要担心这个问题,除非您需要在网格之外使用实体类。
SubmitChanges
DataContext
产品
DataContext.Refresh