C#在组合框的文本字段中显示对象Id,在下拉列表中显示对象描述

C#在组合框的文本字段中显示对象Id,在下拉列表中显示对象描述,c#,combobox,C#,Combobox,我想在组合框的文本字段中显示对象的Id。单击时,我希望列表显示对象的描述 这就是我得到的 这就是我想看到的 我之所以需要这样做,是因为我想输入加载数据的对象Id,我不想让用户按描述搜索 我尝试使用DisplayMember和ValueMember属性,如下所示: ComboBox1.ValueMember = "Id"; ComboBox1.DisplayMember = "Name"; 但这只会在下拉列表中显示描述,并返回Id作为值,我希望在文本属性中显示Id。我尝试使用事件Select

我想在组合框的文本字段中显示对象的Id。单击时,我希望列表显示对象的描述

这就是我得到的

这就是我想看到的

我之所以需要这样做,是因为我想输入加载数据的对象Id,我不想让用户按描述搜索

我尝试使用
DisplayMember
ValueMember
属性,如下所示:

ComboBox1.ValueMember = "Id";
ComboBox1.DisplayMember = "Name";
但这只会在下拉列表中显示描述,并返回Id作为值,我希望在文本属性中显示Id。我尝试使用事件
SelectIndexChanged
SelectedValueChanged
SelectionChangeCommitted
,并将文本属性更改为Id,但它只将文本更改为Id,然后将其更改回描述。这是我在事件中尝试触发的代码:

ComboBox1.Text = ComboBox1.SelectedValue.ToString();

正如我所说,它将文本更改为“Id”(因为值是Id),但将其更改回“Name”。

嘿,因此您所要求的并不是直接可能的,但这里有一个让它工作的技巧。首先创建一个如下所示的类:

ComboBox1.ValueMember = "Id";
ComboBox1.DisplayMember = "Name";
公共类ComboBoxItem

{
    public string Text { get; set; }
    public object Value { get; set; }

    public override string ToString()
    {
        return Text;
    }
}
然后,继续这样使用它:

ComboBoxItem item = new ComboBoxItem();
item.Text = "Item text1";
item.Value = 12;

comboBox1.Items.Add(item);

希望有帮助

为什么不添加一个额外的字段来保存Id呢?为什么要替换组合框中的值?嘿,只是跟进一下。我的解决方案对你有用吗?@Dido主要原因是,这是一个程序,是在PowerBuilder上开发的现有应用程序的附加程序。我尝试在PB上做的是可能的,主程序使用它,我尝试保持UI的一致性,除此之外,我们正在将主程序的平台从Powerbuilder移动到C#,因此这将非常有用。在powerbuilder中,您可以实际显示整个数据网格,并且在文本字段中显示项目的ID。@CapnJack抱歉,我没有响应,我不在城里。我现在正试图做一些类似于你回答的事情,但我运气不太好。我想我会看看是否值得创建一个从ComboBox扩展的类,或者继续尝试使用它。@Eriml“运气不好”,出了什么问题?也许我能帮忙!