多列组合框
我读过组合框不能有多列。这让我有点卡住,因为我想要做的是从一个表中显示一个字段,但从同一个表中的第二个字段返回相应的值,即多列组合框
我想在组合框中显示CustomerNames,但是当用户选择一个名称时,将返回CustomerID字段。最好的解决办法是什么?
您不需要多列来实现它。
class Member
{
public string Name{get;set;}
public string Address{get;set;}
public int ID{get;set;}
public string Description
{
get
{
return string.Format("{0}, {1}", Name, Address);
}
}
}
var members = new []
{
new Member(){ID = 1, Name = "John", Address = "Addr 1"},
new Member(){ID = 2, Name = "Mary", Address = "Addr 2"}
};
m_ComboBox.DataSource = members;
m_ComboBox.DisplayMember = "Description"
m_ComboBox.ValueMember = "ID";
现在你可以访问公司名片ID
var selectedID = m_ComboBox.CelectedValue();
最好的方法是使用组合框DisplayMember
和ValueMember
性能
设置ComboBox.DisplayMember
你要显示的属性。使用ValueMember
作为您想要返回的财产。然后,您可以使用ComboBox.SelectedValue
获取当前/选定的ValueMember
ComboBoxItem的值不必与Text相同,请考虑使用ID作为值。
您可以通过将组合框的DisplayMember
和ValueMember
属性分别设置为"CustomerName"
和"CustomerID"
来实现所需的行为。
看看ValueMember
属性。您应该将其设置为CustomerID。绑定到组合框后,显示给用户的实际字段将是CustomerName,但是当您想要获取'CustomerName'的值时,它将返回CustomerID。
当您想要获取组合框的值时,只需参考SelectedValue
。
如果你坚持要在组合框中显示这两种方法,有一些这样做的方法很糟糕,但我建议再次检查你的需求,看看它是否是绝对必要的。
或者,您也可以定义KeyValuePair与你预期的ID和文本字段的对象。将它们提供给组合,因为其Items属性是对象的集合。然后,用于检索使用类似
var x = (KeyValuePair)combo.Items[0];
然后访问x的Key和Value属性。
您可以使用ComboBoxItem的Tag属性来存储该值。
这可以进一步推动,即显示客户地址行1,2,3(三个字段),但返回一个AddressID(第4个字段)? – PJW 2012-01-11 17:15:11
您应该创建一个聚合字段,它将提供成员实例的描述(名称+地址+ e.t.c.) – 2012-01-12 11:10:09
请检查更新后的代码 – 2012-01-12 11:10:26