多列组合框

时间:2012-01-11 16:08:48

标签: c# winforms

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

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

7 个答案:

答案 0 :(得分:2)

最好的方法是使用ComboBox DisplayMemberValueMember属性

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

答案 1 :(得分:1)

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

答案 2 :(得分: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();

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

如果您想获得组合框的值,只需引用SelectedValue

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

答案 5 :(得分:0)

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

的演员表
var x = (KeyValuePair)combo.Items[0];

然后访问x。

的Key和Value属性

答案 6 :(得分:0)

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