为组合框的每个元素分配一个标签和一个值(c# - winforms)

Assign a label and a value to each element of a combobox (c# - winforms)

[c#]

读取数据库中的数据后,我想在组合框中插入并为任何插入分配一个值。

示例:
data_read

没有在组合框中插入姓氏的问题。 但是我在 surname1 at id 1...surname2 at id 12 等中分配时遇到问题... 我需要分配我从查询中读取的值 并且不使用 ifcase 语句进行赋值。

可以为组合框的任何项目分配标签(即'surname')和值(即'id')?!


可能在组合框中看不到 'id'?

简而言之,我可以做一些类似于 HTML 选项值的事情,其中​​对于每个标签(通过 fogazzaro,通过 roma 等......我们有一个关联的值)。

<select name="sedi">
  <option value="1">Via fogazzaro</option>
  <option value="22">Via roma</option>
  <option value="38">Via Olevano</option>
  <option value="42">Via Mazzini</option>
</select>

抱歉英语不好。

希望你能理解我。

适合所有人的好代码! :)

实现此目的的一种方法是创建一个包含两个字段的 class,IDSurname。然后使用 SelectedIndex 属性 将用户的选择解析为集合中的索引:

class Person
{
    ID { get; set }
    Surname { get; set; }      
}

Person 个对象的集合放入 List(可能是一个真实世界的示例将从数据库中读取并在循环中填充列表):

List<Person> people = new List<Person>() {
    new Person()
    {
        ID = 1,
        Surname = "Smith"
    },
    ...
};

然后当用户从列表中选择一个项目时,使用选择的索引来解析Person对象实例:

private void ComboBox_SelectedIndexChanged(object sender, System.EventArgs e)
{
    // Do something useful with your object:
    MessageBox.Show(
        "You selected:\n" + 
        people[comboBox.SelectedIndex].ID + "\n" + 
        people[comboBox.SelectedIndex].Surname);
}

创建一个 class 来存储您的数据,并将 ToString() 方法重写为 return 您希望在组合框中看到的文本。

class Item
{
    public int ID { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        return Name;
    }
}

然后将此 class 的对象添加到组合框。

comboBox.Items.Add(new Item() {ID = 1, Name = "Fred"});
comboBox.Items.Add(new Item() {ID = 2, Name = "Jane"});

然后,访问所选项目(在处理程序中或任何地方):

Item selected = comboxBox.SelectedItem as Item;

if (selected != null)
{
    // do something with 'selected'
}

如果您的 ID 是唯一的,您可以有一个字典,其中键是 ID,值是姓氏。在您的组合框中添加

SelectedValuePath="Key" DisplayMemberPath="Value"

并使 ItemsSource 成为字典。这样,组合框的 SelectedItem 将是 ID,但 "label" 将是姓氏