C# 基于ValueMember从组合框获取索引

C# 基于ValueMember从组合框获取索引,c#,.net,winforms,combobox,C#,.net,Winforms,Combobox,我有一个组合框,它将名称存储为DisplayMember,将id存储为ValueMember。在我的数据库中,我只存储id 如何通过id将其设置为正确的索引 示例代码: Combobox.SelectedIndex = Combobox.FindByValueMember("10"); 我能找到的最好的答案是这个问题,但投票最多的答案并不能解释这个问题是什么 int index = comboref.Items.IndexOf("string"); 不工作,因为它不按ValueMember搜

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

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

示例代码:

Combobox.SelectedIndex = Combobox.FindByValueMember("10");
我能找到的最好的答案是这个问题,但投票最多的答案并不能解释这个问题是什么

int index = comboref.Items.IndexOf("string");
不工作,因为它不按ValueMember搜索


回答它,但我想知道是否有更好的方法。您不需要根据所选值查找索引,只需设置
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;
}
虽然上面的示例显示了如何使用选定值设置选择,但如果出于任何原因,您希望基于该值查找项目或选定索引,则需要使用此扩展方法并基于该值查找项目

示例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;
}
private void按钮1\u单击(对象发送者,事件参数e)
{
var值=3;
var item=comboBox1.Items.Cast()
.Where(x=>comboBox1.GetItemValue(x).Equals(value))
.FirstOrDefault();
comboBox1.SelectedItem=项目;
}
示例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;
}
private void按钮1\u单击(对象发送者,事件参数e)
{
var值=3;
var item=comboBox1.Items.Cast()
.Where(x=>comboBox1.GetItemValue(x).Equals(value))
.FirstOrDefault();
var index=comboBox1.Items.IndexOf(item);
comboBox1.SelectedIndex=索引;
}

您不需要根据所选值查找索引,只需设置
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;
}
虽然上面的示例显示了如何使用选定值设置选择,但如果出于任何原因,您希望基于该值查找项目或选定索引,则需要使用此扩展方法并基于该值查找项目

示例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;
}
private void按钮1\u单击(对象发送者,事件参数e)
{
var值=3;
var item=comboBox1.Items.Cast()
.Where(x=>comboBox1.GetItemValue(x).Equals(value))
.FirstOrDefault();
comboBox1.SelectedItem=项目;
}
示例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;
}
private void按钮1\u单击(对象发送者,事件参数e)
{
var值=3;
var item=comboBox1.Items.Cast()
.Where(x=>comboBox1.GetItemValue(x).Equals(value))
.FirstOrDefault();
var index=comboBox1.Items.IndexOf(item);
comboBox1.SelectedIndex=索引;
}

您是否尝试过以下操作:
comboref.Items[“string”]
,似乎是让我看看它是否有效,我没有找到问题集
SelectedValue
。您不需要查找index.IMO,
SelectedValue
应该是您要查找的;然而,出于学习目的,我分享了基于值设置
SelectedItem
SelectedIndex
的示例。您是否尝试过:
comboref.Items[“string”]
,这似乎是一个让我看看是否有效的问题,我没有找到该问题集
SelectedValue
。您不需要查找index.IMO,
SelectedValue
应该是您要查找的;但是为了学习,我分享了一些示例,用于根据值设置
SelectedItem
SelectedIndex
。感谢提供这些示例。设置SelectedValue对我来说很有效,但与第一个示例中使用Int的建议不同。我必须执行
comboBox1.SelectedValue=value.ToString()
,否则它将变为null。不客气。我的示例中的类型是
int
,因此不需要
ToString
。它应该遵循上次在
DataSource
@Joãonnes set
comboBox1.DataSource=…
中对象的
ValueMember
字段中设置的相同类型。感谢您的示例。设置SelectedValue对我来说很有效,但与第一个示例中使用Int的建议不同。我必须执行
comboBox1.SelectedValue=value.ToString()
,否则它将变为null。不客气。我的示例中的类型是
int
,因此不需要
ToString
。它应该遵循上次在
DataSource
@Joãonnes set
comboBox1.DataSource=…
中对象的
ValueMember
字段中设置的相同类型。