2013-07-30 3 views
1

Я не уверен, как работает обратная связь с WinForms, но я хочу разрешить обновление ComboBox на основе пользовательского выбора.Динамическое обновление combobox на основе выбора пользователя

В настоящее время, когда я меняю выбор своего первого ComboBox, он не меняет элементы во втором раскрывающемся списке. (только по умолчанию отображается первый элемент)

Каким образом можно изменить это?

код к тому, что у меня есть:

public ContentUploader() 
     { 
      InitializeComponent(); 

      using (SqlConnection con = new SqlConnection(conString)) 
      { 
       con.Open(); 
       using (SqlDataAdapter sda = new SqlDataAdapter("SELECT ... re.OverallID = 1", conString)) 
       { 
        DataTable dt = new DataTable(); 
        sda.Fill(dt); 

        sections_drp.ValueMember = "ID"; 
        sections_drp.DisplayMember = "DisplayName"; 
        sections_drp.DataSource = dt; 
       } 
      } 
      sections_drp.SelectedIndexChanged += (o, e) => FillFirstChildren(); 
     } 
     public void FillFirstChildren() 
     { 
      firstChild_drp.Items.Add("Select Item"); 
      firstChild_drp.SelectedIndex = 0; 

      string sectionId = sections_drp.SelectedValue.ToString(); 

      using (SqlConnection con = new SqlConnection(conString)) 
      { 
       con.Open(); 
       using (SqlDataAdapter sda = new SqlDataAdapter("SELECT ... em.ItemID = ("+ sectionId +")", conString)) 
       { 
        DataTable dt = new DataTable(); 
        sda.Fill(dt); 

        firstChild_drp.ValueMember = "ID"; 
        firstChild_drp.DisplayMember = "DisplayName"; 
        firstChild_drp.DataSource = dt; 
       } 
      } 
      FillSecondChildren(); 
     } 
+0

Использование selected_index_change событием первого комбо, чтобы заполнить второй –

+0

@kostasch. и если у меня есть несколько комбо, я бы заполнил каждый из них в предыдущем событии selected_index_change? – Masriyah

+0

Вы просто ответите на свой вопрос :) –

ответ

2

Winforms не содержит пост обратно. Вам нужно будет привязать к событию SelectedIndexChanged (или Item или Value), чтобы отфильтровать второе раскрывающееся меню.

Пример:

public void FillFirstChildren() 
    { 
     //Your Fill Logic Here 
     ... 

     //Call FillSecondChildren on selection change 
     firstChild_drop.SelectedIndexChanged += (o, e) => FillSecondChildren(); 
    } 
+0

do i place 'firstChild_drop.SelectedIndexChanged + = (o, e) => FillSecondChildren();' внутри 'using' statement и после' firstChild_drp.DataSource = dt'? – Masriyah

+0

В самом конце этого метода. – Khan

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