2017-02-13 2 views
0

У меня есть пара различных словарных структур, которые я хочу отображать в comboBox.отображение участника в словаре на основе ключа (comboBox)

В JumpType.cs:

public SortedDictionary<int, List<string>> jumpCombination = new SortedDictionary<int, List<string>>(); 

Словарь структура будет выглядеть примерно так:

Key Values 
1  Flygande 
     EjFlygande 
2  Bak 
     Pik 
     Test 
3  ... 

я создал два ComboBoxes в моем UI, как это:

Select Key:  _____________ 
       | ComboBox | 
       --------------  __________ 
       _____________  | OK | 
Select Value: | ComboBox |  ---------- 
       -------------- 

В Form1.cs

InitializeComponent(); 
JumpType jt = new JumpType(); 
jt.addjumpCombination(); // populating the dictionary 
if (jt.jumpCombination != null) 
{ 
      comboBoxJumpComboKey.DataSource = new BindingSource(jt.jumpCombination, null); // Key => null 
      comboBoxJumpComboKey.DisplayMember = "Value"; 
      comboBoxJumpComboKey.ValueMember = "Key"; 
      comboBoxJumpComboValue.DisplayMember = "Value"; 
      var selectedValues = jt.jumpCombination //here i'm trying to access value 
        .Where(j => j.Key == Convert.ToInt32(comboJumpComboKey.SelectedItem.Value)) 
        .Select(a => a.Value) 
        .ToList(); 
} 

Как бы я идти о выбирать соответствующие значения в соответствии с выбранным ключом?

Заранее спасибо. Как вы можете видеть на изображении, отображается ключ (1), но я не могу выбрать что-либо из выпадающего списка под ним. comboBox

+0

То, что вы хотите сделать, это изменение списка второго COMBOBOX когда это изменяется индекс первого. Таким образом, вы можете добавить обработчик событий для события с измененным индексом 'comboBoxJumpComboKey'. В этом случае вы меняете 'DataSource'' comboBoxJumpComboValue' – Everyone

+0

@ Everybody yeah точно. Я не знаю, как это сделать. Не могли бы вы дать мне руку помощи здесь? – Joel

+0

Вы используете WPF или WinForms? – Everyone

ответ

2

Я бы инициализировал Dictionary как часть самого интерфейса пользовательского интерфейса.

public SortedDictionary<int, List<string>> jumpCombination; 
    public Form1() { 
     InitializeComponent(); 
     jumpCombination = new SortedDictionary<int, List<string>>(); 
     // do whatever needed to populate the dictionary here 
     // now add the DataSource as the Keys of your dictionary which are integers 
     comboBoxJumpComboKey.DataSource = new BindingSource(jumpCombination.Keys, null); 
    } 

Затем дважды щелкните по comboBoxJumpComboKey в вашем дизайнера пользовательского интерфейса, новый метод придет, заполнить его с этим:

private void comboBoxJumpComboKey_SelectedIndexChanged(object sender, EventArgs e) { 
     comboBoxJumpComboValue.DataSource = jumpCombination[int.Parse(comboBoxJumpComboKey.Items[comboBoxJumpComboKey.SelectedIndex].ToString())]; 
    } 
+0

Я получаю «invalidArgument = Значение -1 недопустимо для« индекса » – Joel

+0

Является ли ваш словарь заполнен? Имеет ли он отрицательные числа в качестве ключей? вы хотите использовать 'comboBoxJumpComboValue.DataSource = jumpCombination [comboBoxJumpComboKey.SelectedIndex];' – Everyone

+0

да, я вызываю его после функции init. И он получает ключ на данный момент. Но из этого значения ключа. чтобы иметь возможность выбирать значения, содержащиеся в этом ключе (в списке) – Joel

Смежные вопросы