2013-12-06 3 views
2

У меня есть ComboBox (myCombo) со следующими функциями:Поиск COMBOBOX для значения

Index  ValueMember  DisplayMember 
0   11    A 
1   34    H 
2   36    J 
3   85    W 
4   99    M 

Я хочу найти индекс в ValueMember в ComboBox.

myCombo.FindString() ищет внутри DisplayMembers, но я хочу искать внутри ValueMembers.

ответ

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... 

Главное здесь в том, что в этой строке, я получаю свойство элемента и получить его значение и сравнить к значению опции (в VB):

CInt(comboBox1.Items(i).GetType().GetProperty("Val").GetValue(comboBox1.Items(i))) = <your int value> 
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) 
Смежные вопросы