C# 具有多列的组合框

C# 具有多列的组合框,c#,winforms,C#,Winforms,我读过组合框不能有多列。这让我有点困惑,因为我要做的是显示表中的一个字段,但从同一个表中的第二个字段返回相应的值,即 我想在组合框中显示CustomerNames,但当用户选择名称时,将返回CustomerID字段。最好的解决方法是什么?最好的方法是使用组合框DisplayMember和ValueMember属性 将组合框.DisplayMember设置为要显示的属性。对要返回的属性使用ValueMember。然后,您可以使用组合框。SelectedValue获取当前/选定的ValueMembe

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


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

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


将组合框.DisplayMember设置为要显示的属性。对要返回的属性使用
ValueMember
。然后,您可以使用组合框。SelectedValue获取当前/选定的
ValueMember
最佳方法是使用组合框
DisplayMember
ValueMember
属性


将组合框.DisplayMember设置为要显示的属性。对要返回的属性使用
ValueMember
。然后可以使用<代码>组合框。SelectedValue < /Cord>获取当前/选择的代码> > ValueMeNe> <代码>

< p>不必与文本相同,请考虑使用ID作为值。

< p>考虑使用ID作为值。< /p> 您可以通过设置<代码>显示成员< /COD>和<代码> ValueMube < /代码>组合框的属性为<代码>“客户名称”<代码> >代码>“CuuleID”。分别。

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

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

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


如果您坚持要在组合框中同时显示这两个属性,有一些黑客的方法可以做到这一点,但我建议您再次检查您的要求,看看是否绝对必要。

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

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


如果您坚持要在组合框中同时显示这两个选项,有一些黑客的方法可以做到这一点,但我建议您再次检查您的需求,看看是否绝对必要。

您不需要多列来实现它

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

实现它不需要多个列

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

或者,您可以使用预期的ID和文本字段定义KeyValuePair对象。将它们馈送到组合,因为其Items属性是对象的集合。然后,要进行检索,请使用类似于

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

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

或者,您可以使用预期的ID和文本字段定义KeyValuePair对象。将它们馈送到组合,因为其Items属性是对象的集合。然后,要进行检索,请使用类似于

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

然后访问x的键和值属性。

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

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

这可以再进一步一点,即显示客户地址行1、2、3(三个字段),但返回地址ID(第四个字段)?您应该创建一个聚合字段,该字段将提供成员实例的描述(名称+地址+e.t.c.)。这可以进一步推一推,即显示客户地址行1、2、3(三个字段),但返回地址ID(第四个字段)?您应该创建一个聚合字段,该字段将提供成员实例的描述(姓名+地址+e.t.c.)