具有多列的组合框

本文关键字:组合 | 更新日期: 2023-09-27 18:19:57

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

我想在组合框中显示CustomerNames,但当用户选择名称时,会返回CustomerID字段。这方面最好的办法是什么?

具有多列的组合框

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

ComboBox.DisplayMember设置为要显示的特性。对要返回的属性使用ValueMember。然后您可以使用ComboBox.SelectedValue来获取当前/选定的ValueMember

您不需要多个列来实现它。

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

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

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

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

当您想要获得组合框的值时,只需参考SelectedValue即可。

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

或者,您可以使用预期的Id和文本字段定义KeyValuePair对象。将它们馈送到组合中,因为它的Items属性是对象的集合。然后,为了检索,使用类似投射的

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

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

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