2012-01-11 73 views
0

我读过组合框不能有多列。这让我有点卡住,因为我想要做的是从一个表中显示一个字段,但从同一个表中的第二个字段返回相应的值,即多列组合框

我想在组合框中显示CustomerNames,但是当用户选择一个名称时,将返回CustomerID字段。最好的解决办法是什么?

回答

1

您不需要多列来实现它。

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(); 
+0

这可以进一步推动,即显示客户地址行1,2,3(三个字段),但返回一个AddressID(第4个字段)? – PJW 2012-01-11 17:15:11

+0

您应该创建一个聚合字段,它将提供成员实例的描述(名称+地址+ e.t.c.) – 2012-01-12 11:10:09

+0

请检查更新后的代码 – 2012-01-12 11:10:26

2

最好的方法是使用组合框DisplayMemberValueMember性能

设置ComboBox.DisplayMember你要显示的属性。使用ValueMember作为您想要返回的财产。然后,您可以使用ComboBox.SelectedValue获取当前/选定的ValueMember

1

ComboBoxItem的值不必与Text相同,请考虑使用ID作为值。

0

您可以通过将组合框的DisplayMemberValueMember属性分别设置为"CustomerName""CustomerID"来实现所需的行为。

0

看看ValueMember属性。您应该将其设置为CustomerID。绑定到组合框后,显示给用户的实际字段将是CustomerName,但是当您想要获取'CustomerName'的值时,它将返回CustomerID。

当您想要获取组合框的值时,只需参考SelectedValue

如果你坚持要在组合框中显示这两种方法,有一些这样做的方法很糟糕,但我建议再次检查你的需求,看看它是否是绝对必要的。

0

或者,您也可以定义KeyValuePair与你预期的ID和文本字段的对象。将它们提供给组合,因为其Items属性是对象的集合。然后,用于检索使用类似

var x = (KeyValuePair)combo.Items[0]; 

然后访问x的Key和Value属性。

0

您可以使用ComboBoxItem的Tag属性来存储该值。