【问题标题】:Get index from Combobox based on ValueMember根据 ValueMember 从 Combobox 获取索引
【发布时间】:2020-01-20 14:25:05
【问题描述】:

我有一个组合框,将 name 存储为 DisplayMember,将 id 存储为 ValueMember。在我的数据库中,我只存储了id

如何通过id将其设置为正确的索引?

示例代码:

Combobox.SelectedIndex = Combobox.FindByValueMember("10");

我能找到的最好的答案是this 问题,但投票最多的答案并没有弄清楚问题是什么。

int index = comboref.Items.IndexOf("string");

不起作用,因为它不按 ValueMember 搜索。

This 回答了这个问题,但我想知道是否有更好的方法。

【问题讨论】:

  • 你试过了吗:comboref.Items["string"],好像是way
  • 让我看看它是否有效,我没有找到那个问题
  • 设置SelectedValue。您无需查找索引。
  • IMO, SelectedValue 应该是你要找的;但是出于学习目的,我分享了基于值设置SelectedItemSelectedIndex 的示例。

标签: c# .net winforms combobox


【解决方案1】:

不需要根据选中的值来查找索引,设置SelectedValue即可。

示例 1 - 设置 SelectedValue

private void Form1_Load(object sender, EventArgs e)
{
    comboBox1.DataSource = Enumerable.Range(1, 5)
        .Select(x => new { Name = $"Product {x}", Id = x }).ToList();
    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember = "Id";
}
private void button1_Click(object sender, EventArgs e)
{
    comboBox1.SelectedValue = 3;
}

虽然上面的示例显示了如何使用选定的值设置选择,但如果出于任何原因您想根据该值查找项目或选定的索引,那么您需要使用此GetItemValue 扩展方法并找到该项目以此为基础。

示例 2 - 按值获取项目 → 设置 SelectedItem

private void button1_Click(object sender, EventArgs e)
{
    var value = 3;
    var item = comboBox1.Items.Cast<Object>()
        .Where(x => comboBox1.GetItemValue(x).Equals(value))
        .FirstOrDefault();
    comboBox1.SelectedItem = item;
}

示例 3- 按值获取索引 → 设置 SelectdIndex

private void button1_Click(object sender, EventArgs e)
{
    var value = 3;
    var item = comboBox1.Items.Cast<Object>()
        .Where(x => comboBox1.GetItemValue(x).Equals(value))
        .FirstOrDefault();
    var index = comboBox1.Items.IndexOf(item);
    comboBox1.SelectedIndex = index;
}

【讨论】:

  • 感谢您的示例。设置 SelectedValue 对我有用,但不像第一个使用 Int 的示例中建议的那样。我必须这样做 comboBox1.SelectedValue = value.ToString() 否则它将变为空。
  • 不客气。我的例子中的类型是int,所以不需要ToString。它应该遵循您在DataSource 中对象的ValueMember 字段中设置的相同类型。
  • @JoãoNunes 设置comboBox1.DataSource = ... 最后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多