【发布时间】:2020-01-21 11:28:56
【问题描述】:
是否有任何内置方法可以从 ComboBox 控件 C# 中的选定值中获取选定索引。如果没有,我该如何构建自己的
提前致谢
【问题讨论】:
-
老问题,但需要正确答案,无论数据源类型如何(DataTable、Lits
、...)。看看this post。
是否有任何内置方法可以从 ComboBox 控件 C# 中的选定值中获取选定索引。如果没有,我该如何构建自己的
提前致谢
【问题讨论】:
我认为您正在寻找 SelectedIndex 属性。
int index = comboref.SelectedIndex
当您正在寻找特定值的索引而不是您可以选择的索引时
int index = comboref.Items.IndexOf("string");
它会告诉你哪个索引在组合框上有“字符串”
【讨论】:
int seletedIndex = comboBox.getIndexFromKnownSelectedValue(value)
您可以使用combobox1.Items.IndexOf("string"),它将返回指定项目集合中的索引
或使用combobox1FindString("string") 或findExactString("string") 将返回指定项目的第一次出现。您还可以为其提供与startIndex 对应的第二个参数,以从该索引开始搜索。
希望我回答了你的问题!!
【讨论】:
OP:我想要的是从价值中获取索引。即:int seletedIndex = comboBox.getIndexFromKnownSelectedValue(value)
按值获取项目和按值获取索引
您需要扫描项目并根据SelectedValue 字段为每个项目获取值,然后获取项目的索引。为此,您可以使用此GetItemValue 扩展方法并以这种方式获取项目和索引:
//Load sample data
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)
{
//Knows value
var value = 3;
//Find item based on value
var item = comboBox1.Items.Cast<Object>()
.Where(x => comboBox1.GetItemValue(x).Equals(value))
.FirstOrDefault();
//Find index
var index = comboBox1.Items.IndexOf(item);
//Set selected index
comboBox1.SelectedIndex = index;
}
【讨论】:
不,没有任何内置方法可以从 ComboBox 控件 C# 中的选定值中获取选定索引。 但是您可以创建自己的函数来获得相同的效果。
用法:
int index = CmbIdxFindByValue("YourValue", YourComboBox);
功能:
private int CmbIdxFindByValue(string text, ComboBox cmbCd)
{
int c = 0;
DataTable dtx = (DataTable)cmbCd.DataSource;
if (dtx != null)
{
foreach (DataRow dx in dtx.Rows)
{
if (dx[cmbCd.ValueMember.ToString()].ToString() == text)
return c;
c++;
}
return -1;
} else
return -1;
}
【讨论】:
var item = comboBox1.Items.Cast<Object>() .Where(x => (int)comboBox1.GetItemValue(x) == value) .FirstOrDefault(); 并获取索引var index = comboBox1.Items.IndexOf(item);