2017-04-25 35 views
0

我想從SQL填充組合框,當我從第一個框中選擇一個項目時,選項會在第二個框中受限制。拳頭箱子有一個選定的索引更改事件,但我似乎無法弄清楚如何限制結果。如何獲得一個列表框以顯示其基於前一個組合框的結果。

以下是我有:

private void cb_college_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     lb_allMajors.Items.Clear(); 
     lb_allMajors.Items.Add(cb_college.SelectedIndex); 
    } 


private void populateMajors() 
    { 
     try 
     { 
      string SQL; 
      SQL = "SELECT DISTINCT major_name FROM majors"; 

      using (SqlConnection conn = new SqlConnection(connectionString)) 
      { 
       SqlCommand command = new SqlCommand(SQL, conn); 
       conn.Open(); 
       SqlDataReader reader = command.ExecuteReader(); 
       while (reader.Read()) 
       { 
        lb_allMajors.Items.Add(reader.GetString(0)); 
       } 
      } 
     } 
     catch (SqlException err) 
     { 
      MessageBox.Show(err.Message); 
     } 
    } 

每個主要在數據庫中的專業表具有大專以上ID列鏈接到高校表。所以當你選擇一所大學時(例如商業),我希望主要的專欄只顯示商學院的專業。

+0

search ** winforms cascading combobox **,以及很多結果,如[c-sharpcorner](http://www.c-sharpcorner.com/UploadFile/009464/cascading-combobox-in-windows-application -using-C-Sharp /) –

+0

你有問題嗎? –

回答

0

我不是100%正確的後面或示例顯示,但我認爲你只需要提供populateMajors()方法與包含大學ID或SelectedIndex,無論你想要的使用。

例如:

private void cb_college_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    populateMajors(cb_college.SelectedIndex); // OR More likely Get College ID from Combobox 
} 

private void populateMajors(int CollegeId) 
{ 
    try 
    { 
     string SQL; 
     SQL = "SELECT DISTINCT major_name FROM majors WHERE <yourcollegeindexcol> = " + CollegeId; 

     using (SqlConnection conn = new SqlConnection(connectionString)) 
     { 
      SqlCommand command = new SqlCommand(SQL, conn); 
      conn.Open(); 
      SqlDataReader reader = command.ExecuteReader(); 
      while (reader.Read()) 
      { 
       lb_allMajors.Items.Add(reader.GetString(0)); 
      } 
     } 
    } 
    catch (SqlException err) 
    { 
     MessageBox.Show(err.Message); 
    } 
} 

我懷疑的SelectedIndex是發出正確的參數,但你得到的圖片。

您可能會發現使用ComboBox.DataSource屬性也好於Items.Add - 在網上搜索ComboBox.DataSource以查看它的用法。

+0

我認爲你是正確的獲得大學id形式的組合框。但是我需要確保組合框包含ID – secretlygayfrog

+0

這就是ComboBox.DataSource的來源 - 例如:您可以從SQL DB獲取大學數據並將其存儲在帶有CollegeId和CollegeName列的DataTable中。然後,將您的cb_college.DisplayMember設置爲「CollegeName」,並將cb_college.ValueMember設置爲「CollegeId」。然後,cb_college.SelectedValue包含CollegeId,但它是顯示在列表中的名稱。 –

相關問題