2015-10-02 34 views
0

A DataGridViewComboBoxColumn允許該值成爲列表的成員之一。什麼數據類型可以綁定到DataGridViewComboBoxColumn?

我無法弄清楚將一個DataGridView綁定到自定義類時,它可綁定的值類型。例如如果我將DataPropertyName設置爲「MyProperty」,那麼MyClass.MyProperty可用於getter/setter?

+0

我的測試表明它只需要一個包含允許值之一的字符串,但我想知道是否有人可以指向我的文檔支持(或不支持)? –

回答

0

它能否儘快,因爲它是可轉換string是任何類型(有一個適當的TypeConverter,這也很大程度上取決於你如何設置DisplayMemberValueMember性能。奇怪的是,當你要綁定的屬性只是顯示該類的一些屬性,在這種情況下,只設置DisplayMember不起作用,並且需要暴露該類的某些人爲自指向屬性,以便將其綁定爲ValueMember。我認爲所有設計來自舊時代,當你想顯示obj.Name但綁定obj.Id。無論如何,這裏是一個小樣本,顯示我的意思:

using System; 
using System.Linq; 
using System.Windows.Forms; 

namespace Samples 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      var categories = Enumerable.Range(1, 10).Select(n => new Category { Name = "Category" + n }).ToList(); 
      var products = Enumerable.Range(1, 50).Select(n => new Product { Name = "Product" + n, Category = categories[(n - 1) % categories.Count] }).ToList(); 
      var form = new Form(); 
      var dg = new DataGridView { Dock = DockStyle.Fill, Parent = form, AutoGenerateColumns = false }; 
      dg.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "Name" }); 
      var categoryColumn = new DataGridViewComboBoxColumn { DisplayStyleForCurrentCellOnly = true }; 
      // data part 
      categoryColumn.DataPropertyName = "Category"; // bind to Product.Category property 
      // list part 
      categoryColumn.DisplayMember = "Name"; // bind to Category.Name property 
      categoryColumn.ValueMember = "Self"; // w/o this it doesn't work 
      categoryColumn.DataSource = categories; 
      dg.Columns.Add(categoryColumn); 
      dg.DataSource = products; 
      Application.Run(form); 
     } 
    } 
    public class Category 
    { 
     public string Name { get; set; } 
     public Category Self { get { return this; } } 
    } 
    public class Product 
    { 
     public string Name { get; set; } 
     public Category Category { get; set; } 
    } 
} 
相關問題