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 进行搜索。
这回答了这个问题,但我想知道是否有更好的方法来做到这一点。
您不需要根据所选值查找索引,只需设置SelectedValue。
示例 1 - 设置 SelectedValue
\n\nprivate 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}\nRun Code Online (Sandbox Code Playgroud)\n\n虽然上面的示例显示了如何使用所选值设置选择,但如果出于任何原因您想要根据该值查找项目或所选索引,那么您需要使用此GetItemValue扩展方法并基于该方法查找项目。
\n\n示例 2 - 按值获取项目 \xe2\x86\x92 设置 SelectedItem
\n\nprivate 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}\nRun Code Online (Sandbox Code Playgroud)\n\n示例 3 - 按值 \xe2\x86\x92 获取索引 设置 SelectdIndex
\n\nprivate 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}\nRun Code Online (Sandbox Code Playgroud)\n