DataGridView中的外键组合框

时间:2010-02-13 08:15:30

标签: c# winforms linq datagridview

我有一个包含两个表,产品和许可证的数据库。 Licences.ProductID具有Products.ProductID的外键引用(即该产品的许可证)。

如何在WinForms DataGridView中表示该关系?

在向DataGridView(SQL Metal和通过LINQ to SQL)提供ProductLicences.ProductID时,它会自动生成一个包含文本字段的列,该字段需要“Product”(当然我无法输入...)。

如何更改此列以包含列出可用产品的组合框?


我有一个连接(继承自Linq.DataContext),分配给DataGridView的数据源是Link.IQueryable,生成如下:

var ds = from c in m_connection.Licences
    select c;

1 个答案:

答案 0 :(得分:13)

在这种情况下,您尝试模仿的行为是Lookup Combo。您不想使用Product类的License字段,实际上您想要使用ProductID字段。

这是一个快速的步骤:

  1. 删除网格中的Product列;只保留ProductID

  2. ProductID列的ColumnType媒体资源更改为 DataGridViewComboBoxColumn

  3. 将此列的DataSource更改为新的BindingSourceDataSource设置为MyProject.Product(您可以按照向导操作,可能与您的方法相同它适用于网格本身,但使用Product代替License)。

  4. 将此列的DisplayMember更改为您要在组合框中显示的任何文本,例如ProductName

  5. ValueMember更改为实际主键,例如ProductID

  6. 填充GridView之前,使用产品数据初始化新的productsBindingSource,即使用productBindingSource.DataSource = context.Products;

  7. 就是这样。现在,当您SubmitChanges(假设您一直打开DataContext时),它将使用正确的引用更新ProductID。请注意,它可能不会更新它保存的类的Product引用;如果您因任何原因需要使用实际的实体引用,那么您可能需要先调用DataContext.Refresh方法。但除非你需要在网格之外使用实体类,否则不要担心这个。