![](/img/trans.png)
[英]Foreign key databinding in a datagridview - Combobox with many rows
[英]Combobox for Foreign Key in 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;
在這種情況下,您嘗試模仿的行為是Lookup Combo。 您不想使用License
類的Product
字段,實際上您想要使用ProductID
字段。
這是一個快速的步驟:
刪除網格中的“ Product
列; 只保留ProductID
。
將ProductID
列的ColumnType
屬性更改為DataGridViewComboBoxColumn 。
將此列的DataSource
更改為新的BindingSource
,並將DataSource
設置為MyProject.Product
(您可以按照向導進行操作,可能與對網格本身一樣,但使用Product
而不是License
)。
將此列的DisplayMember
更改為要在組合框中顯示的任何文本,例如ProductName
。
將ValueMember
更改為實際的主鍵,例如ProductID
。
在填充GridView
本身之前 ,使用product數據初始化新的productsBindingSource
,即使用productBindingSource.DataSource = context.Products;
。
而已。 現在當您SubmitChanges
(假設您一直打開DataContext
),它將使用正確的引用更新ProductID
。 請注意,它可能不會更新它保存的類的Product
引用; 如果你因任何原因需要使用實際的實體引用,那么你可能需要首先調用它上面的DataContext.Refresh
方法。 但除非您需要在網格外部使用實體類,否則不要擔心這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.