使用像combobox这样的控件连接自定义列表

时间:2010-08-21 11:20:00

标签: c# winforms list combobox

我有表 - 自定义ID(如1.10,1.20)和名称(值可重复的字符串)。我的问题是将它设置为winForms控件,如组合框。但是我希望字段中的用户只会看到名称和ID不可见但是下意识地应该连接到控件中的名称,当用户在组合框中选择项目时我可以获得此ID。

任何想法都有可能吗?

4 个答案:

答案 0 :(得分:2)

像这样设置你的组合框:

// item type to display in the combobox
public class Item
{
    public int Id { get; set; }
    public string Text { get; set; }
}

// build new list of Items
var data = List<Item>
{
    new Item{Id = 1, Text = "Item 1"},
    new Item{Id = 2, Text = "Item 2"},
    new Item{Id = 3, Text = "Item 3"}
};

// set databind
comboBox1.DataSource = data;
comboBox1.ValueMember = "Id";  // the value of a list item should correspond to the items Id property
comboBox1.DisplayMember = "Text";  // the displayed text of list item should correspond to the items Id property

// get selected value
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    var selectedValue = comboBox1.SelectedValue;        
}

答案 1 :(得分:1)

使用DisplayMember属性设置要显示的内容,并使用ValueMember设置实际链接的内容。

e.g。在您的情况下,将DataSource设置为表格,将DisplayMember设置为名称,将ValueMember设置为ID。

答案 2 :(得分:1)

绑定到列表:

产品:

class MyItem
{
    public int Id { get; set; }
    public string DisplayText { get; set; }
}

设置绑定:

List<MyItem> items = new List<MyItem>
{
    new MyItem(){ Id = 1, DisplayText = "one"},
    new MyItem(){ Id = 2, DisplayText = "two"},
};

comboBox1.DisplayMember = "DisplayText"; // or whatever field your you want to display
comboBox1.DataSource = items;

找到价值:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    var item = comboBox1.SelectedItem as MyItem;
    if (item != null)
        Console.WriteLine(item.Id);
}

答案 3 :(得分:0)

摆脱ItemData概念必须是微软有史以来最愚蠢的事情之一。真的麻木了。

这正是你所需要的。

这是一个模仿该行为的链接。 ItemData