C# 组合框设置索引时我有 ID

本文关键字:ID 索引 组合 设置 | 更新日期: 2023-09-27 18:35:25

我有一个类似于以下内容的类:

class ComboboxValue
{
  public int Id { get; private set; }
  public string Name { get; private set; }
  public ComboboxValue(int id, string name)
  {
    Id = id;
    Name = name;
  }
  public override string ToString()
  {
    return Name;
  }
}

要从组合框中获取选定的值,我使用:

Combobox cb = new Combobox();
cb.Items.Add(new ComboboxValue(10, "Example value"));
ComboboxValue tmpComboboxValue = (ComboboxValue)cb.SelectedItem;

但是,当我知道以前存储的 ID 时,如何设置 ComboBox 的索引?...对于此示例,ID:10(来自 sql 查询)

C# 组合框设置索引时我有 ID

下面是第一个解决方案,它涉及跟踪您在 ComboBox 中填充的项目:

// Populate the ComboBox
var values = new ComboBoxValue[]
{
    new ComboBoxValue() { ID = 1, Name = "Test" },
    new ComboBoxValue() { ID = 2, Name = "Test 2" },
};
comboBox1.Items.AddRange(values);
...
// Set selected item based on an ID
int id = 1;
comboBox1.SelectedItem = values.Single(x => x.ID == id);

如果要将实例传递到类而不仅仅是 id,则可以编写cb.SelectedItem = item

您还可以利用 ComboBox 的ValueMemberSelectedValue属性来做得更好一点。 您必须首先设置 ComboBox 的 DataSource 属性才能执行此操作。 您应该能够将数据源设置为简单列表。

var values = new ComboBoxValue[]
{
    new ComboBoxValue() { ID = 1, Name = "Test" },
    new ComboBoxValue() { ID = 2, Name = "Test 2" },
};
comboBox1.DataSource = values;
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "ID";
comboBox1.SelectedValue = 1;