簡體   English   中英

如何使用BindingSource綁定DataGridView中的導航屬性(二級屬性)?

[英]How to bind a Navigation Property (second level properties) in DataGridView using BindingSource?

我使用了兩個實體類將值綁定到DataGridView 一個是估計和公司。

  • 估算有“Id,Estimate Number,Estimate Amount,CompanyId”等列
  • 公司有“Id,Company Name,Address”等欄目

我創建了兩個BindingSource例如EstimateBindingSourceCompanyBindingSource

  1. CompanyBindingSourceDataSource作為EstimateBindingSource ,將DataMember作為Estimates
  2. EstimateBindingSourceDataSource作為Estimates實體類,並且沒有定義DataMember

我已使用網格DataSourceEstimateBindingSource綁定到DataGridView

在這里,我需要在DataGridView中顯示估計數字,估計金額和公司名稱 。我無法實現這一目標。

注意: 我沒有做任何邏輯背后的代碼來做到這一點。需要只使用設計來實現這一點。

用於在DataGridView中顯示第二級屬性的選項

要顯示導航屬性的子屬性,可以使用以下任一選項:

  1. 使用DataGridViewComboBox列並將其綁定到CompanyId並將其DataSource設置為公司列表,將DisplayMember屬性設置為公司的Name屬性,將ValueMember設置為公司的Id屬性。

  2. 覆蓋Company類的ToString()方法並返回公司Name 然后在網格中顯示Company導航屬性。

  3. Estimate創建一個CompanyName屬性,該屬性返回其Company.Name值並在網格中顯示CompanyName

  4. 使用DataGridView CellFormatting事件並將e.Value設置為要在單元格中顯示的所需值(公司名稱)。

  5. 使用Linq查詢ViewModel您的Estimates列表或使用ViewModel並將結果傳遞給數據網格視圖。

  6. Estimate類型創建TypeDescriptor以解析二級屬性。 要顯示公司的屬性而不是公司ID,可以使用DataGridViewComboBoxColumn

使用ComboBox列

由於您要求使用設計器而不編寫代碼的機制,因此我更多地描述了此選項。 以下是您應該執行的設置:

  • EstimatesBindingSource應綁定到Estimates列表
  • DataGridView應綁定到EstimatesBindingSource
  • CompanyBindingSource僅用作組合框列的數據源,應使用Companies列表填充
  • 要在Estimates列表中顯示CompanyName ,只需使用DataGridViewComboBoxColumn並將其DataSource設置為公司列表,並將DisplayMember設置為CompanyName ,將其value值設置為Id 並將其綁定到Estimate CompanyId字段。

此外,如果您的要求是不將其顯示為ComboBox ,只需將DataGridViewComboBoxColumn DisplayStyle屬性設置為Nothing 它刪除了下拉樣式。

你也可以發現這篇文章有用:

暫無
暫無

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

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