2015-09-09 3 views
0

У меня есть две выпадающие списки, в которых первая имеет категории (и я могу легко ее заполнить из исходного файла). Фокус в том, что второй combobox показывает только те элементы, которые связаны с выбранной категорией, из первого списка. Например:Содержимое Combobox, основанное на другом значении combobox

CB1 заполняется из Исходный_файл с категорией значения 1, 2, 3 & 4 и CB2 заполняется значения A, B, C, D, E, F, G, H

Что Я не умею делать это, ограничивая то, что видно на cb2. Поэтому, когда значение cb1 равно «1», я хочу видеть только «A» и «B» в cb2, а если cb1 изменяется на «2», я хочу видеть только «C» и «D».

+0

Использование https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectionchangecommitted%28v=vs.80%29.aspx HTTP: // StackOverflow. com/questions/12494634/fill-combobox-from-database – Elshan

+1

вы можете показать свой код? –

+0

Winforms или MVC? – Gnqz

ответ

2

Для WinForms:

Если у вас есть форма с 2 комбо-боксов (CB1, CB2) вы могли бы использовать что-то вроде этого? (очевидно, для поддержки ваших объектов данных).

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      //create a list for data items 
      List<MyComboBoxItem> cb1Items = new List<MyComboBoxItem>(); 

      //assign sub items 
      cb1Items.Add(new MyComboBoxItem("1") 
      { 
       SubItems = { new MyComboBoxItem("A"), new MyComboBoxItem("B") } 
      }); 

      cb1Items.Add(new MyComboBoxItem("2") 
      { 
       SubItems = { new MyComboBoxItem("C"), new MyComboBoxItem("D") } 
      }); 

      cb1Items.Add(new MyComboBoxItem("3") 
      { 
       SubItems = { new MyComboBoxItem("E"), new MyComboBoxItem("F") } 
      }); 

      cb1Items.Add(new MyComboBoxItem("4") 
      { 
       SubItems = { new MyComboBoxItem("G"), new MyComboBoxItem("H") } 
      }); 

      //load data items into combobox 1 
      cb1.Items.AddRange(cb1Items.ToArray()); 
     } 

     private void cb1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      //get the combobox item 
      MyComboBoxItem item = (sender as ComboBox).SelectedItem as MyComboBoxItem; 

      //make sure no shinanigans are going on 
      if (item == null) 
       return; 

      //clear out combobox 2 
      cb2.Items.Clear(); 

      //add sub items 
      cb2.Items.AddRange(item.SubItems.ToArray()); 
     } 
    } 

    public class MyComboBoxItem 
    { 
     public string Name; 
     public List<MyComboBoxItem> SubItems = new List<MyComboBoxItem>(); 

     public MyComboBoxItem(string name) 
     { 
      this.Name = name; 
     } 

     public override string ToString() 
     { 
      return Name; 
     } 
    } 
Смежные вопросы