簡體   English   中英

DataGridView中的外鍵組合框

[英]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字段。

這是一個快速的步驟:

  1. 刪除網格中的“ Product列; 只保留ProductID

  2. ProductID列的ColumnType屬性更改為DataGridViewComboBoxColumn

  3. 將此列的DataSource更改為新的BindingSource ,並將DataSource設置為MyProject.Product (您可以按照向導進行操作,可能與對網格本身一樣,但使用Product而不是License )。

  4. 將此列的DisplayMember更改為要在組合框中顯示的任何文本,例如ProductName

  5. ValueMember更改為實際的主鍵,例如ProductID

  6. 填充GridView本身之前 ,使用product數據初始化新的productsBindingSource ,即使用productBindingSource.DataSource = context.Products;

而已。 現在當您SubmitChanges (假設您一直打開DataContext ),它將使用正確的引用更新ProductID 請注意,它可能不會更新它保存的類的Product引用; 如果你因任何原因需要使用實際的實體引用,那么你可能需要首先調用它上面的DataContext.Refresh方法。 但除非您需要在網格外部使用實體類,否則不要擔心這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM