根据ValueMember从Combobox中获取索引

Joã*_*oão 1 .net c# combobox winforms

我有一个组合框,将一个name作为 DisplayMember 和一个id作为 ValueMember 存储。在我的数据库中,我仅存储id.

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

示例代码:

Combobox.SelectedIndex = Combobox.FindByValueMember("10");
Run Code Online (Sandbox Code Playgroud)

我能找到的最好的就是这个问题,但投票最多的答案并没有理解问题是什么。

int index = comboref.Items.IndexOf("string");
Run Code Online (Sandbox Code Playgroud)

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

回答了这个问题,但我想知道是否有更好的方法来做到这一点。

Rez*_*aei 5

您不需要根据所选值查找索引,只需设置SelectedValue

\n\n

示例 1 - 设置 SelectedValue

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

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

\n\n

示例 2 - 按值获取项目 \xe2\x86\x92 设置 SelectedItem

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

示例 3 - 按值 \xe2\x86\x92 获取索引 设置 SelectdIndex

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