在ComboBox的ValueMembers中搜索值

时间:2013-12-06 02:42:11

标签: vb.net combobox indexing find key-value

我有一个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中搜索。

2 个答案:

答案 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)