0
A DataGridViewComboBoxColumn
允許該值成爲列表的成員之一。什麼數據類型可以綁定到DataGridViewComboBoxColumn?
我無法弄清楚將一個DataGridView
綁定到自定義類時,它可綁定的值類型。例如如果我將DataPropertyName
設置爲「MyProperty」,那麼MyClass.MyProperty
可用於getter/setter?
A DataGridViewComboBoxColumn
允許該值成爲列表的成員之一。什麼數據類型可以綁定到DataGridViewComboBoxColumn?
我無法弄清楚將一個DataGridView
綁定到自定義類時,它可綁定的值類型。例如如果我將DataPropertyName
設置爲「MyProperty」,那麼MyClass.MyProperty
可用於getter/setter?
它能否儘快,因爲它是可轉換從string
是任何類型(有一個適當的TypeConverter
,這也很大程度上取決於你如何設置DisplayMember
和ValueMember
性能。奇怪的是,當你要綁定的屬性只是顯示該類的一些屬性,在這種情況下,只設置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; }
}
}
我的測試表明它只需要一個包含允許值之一的字符串,但我想知道是否有人可以指向我的文檔支持(或不支持)? –