pet*_*hen 8 c# linq datagridview winforms
我有一个包含两个表,产品和许可证的数据库.Licences.ProductID有外键引用Products.ProductID(即该产品的许可证).
如何在WinForms DataGridView中表示该关系?
在向DataGridView(SQL Metal和通过LINQ to SQL)提供ProductLicences.ProductID时,它会自动生成一个包含文本字段的列,该字段需要"Product"(当然我无法输入...).
如何更改此列以包含列出可用产品的组合框?
我有一个连接(继承自Linq.DataContext),分配给DataGridView的数据源是a Link.IQueryable,生成如下:
var ds = from c in m_connection.Licences
select c;
Run Code Online (Sandbox Code Playgroud)
Aar*_*ght 13
在这种情况下,您尝试模仿的行为是Lookup Combo.您不想使用该类的Product字段License,您实际上想要使用该ProductID字段.
这是一个快速的步骤:
删除Product网格中的列; 只保留ProductID.
将ProductID列的ColumnType属性更改为DataGridViewComboBoxColumn.
将此列更改为设置DataSource为的新列(您可以按照向导进行操作,可能与对网格本身一样,但使用而不是).BindingSourceDataSourceMyProject.ProductProductLicense
例如DisplayMember,将此列更改为要在组合框中显示的任何文本ProductName.
将更ValueMember改为实际的主键,例如ProductID.
在填充GridView自身之前,productsBindingSource使用产品数据初始化new productBindingSource.DataSource = context.Products;.
而已.现在,当你SubmitChanges(假设你一直保持DataContext开放状态)时,它将ProductID使用正确的参考更新.请注意,它可能不会更新Product它保存的类的引用; 如果您因任何原因需要使用实际的实体引用,那么您可能需要DataContext.Refresh首先在其上调用该方法.但除非您需要在网格外部使用实体类,否则不要担心这一点.
| 归档时间: |
|
| 查看次数: |
8864 次 |
| 最近记录: |