我有一个ComboBox(myCombo),具有以下功能:
Index ValueMember DisplayMember
0 11 A
1 34 H
2 36 J
3 85 W
4 99 M
我想在ComboBox中找到ValueMember的索引。
myCombo.FindString()在DisplayMembers中搜索,但我想在ValueMembers中搜索。
答案 0 :(得分:1)
让我们假装你的组合中的项目是一致的类型。对不起c#,但它非常接近VB
在构造函数中设置你的组合:
comboBox1.Items.Add(new { Name = "a", Val = 35 });
comboBox1.Items.Add(new { Name = "b", Val = 30 });
comboBox1.Items.Add(new { Name = "c", Val = 256 });
comboBox1.ValueMember = "Val";
comboBox1.DisplayMember = "Name";
然后,点击我正在寻找值为256的项目索引:
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < comboBox1.Items.Count; i++)
{
if ((int)comboBox1.Items[i].GetType().GetProperty("Val").GetValue(comboBox1.Items[i]) = 256)
{
MessageBox.Show("index: " + i.ToString());
}
}
}
这里我使用反射来获取一致类型属性的值。如果你知道你使用的对象的类型 - 它更容易 - 使用DirectCast(这是VB):
If DirectCast(comboBox1.Items(i), <known_type>).Val = 256 Then...
这里的主要内容是,在这一行中,我获取了item属性并获取其值并与提供的值进行比较(在VB中):
CInt(comboBox1.Items(i).GetType().GetProperty("Val").GetValue(comboBox1.Items(i))) = <your int value>
答案 1 :(得分:0)
试试这个:
(For index = 0 To comboBox1.Items.Count - 1
comboBox1.SelectedIndex = index
Dim dr As DataRowView = TryCast(Me.BindingContext(comboBox1.DataSource).Current, DataRowView)
If dr(1).ToString() = "your Value" Then
Exit For
End If
Next)