下拉框的兩級聯動是我們開發中經常遇到一種情況。比如一個學生管理系統中,根據年級、科目及姓名查詢學生考試成績,年級和科目都是硬碟中的有限數據(資料庫)而學生則可以有用戶手動指定,這時在資料庫中有年級和科目兩張表,每門科目都對應一個年級,所以我們可以用兩個下拉框(Combobox)來存儲年級和科目信息來... ...
下拉框的兩級聯動是我們開發中經常遇到一種情況。比如一個學生管理系統中,根據年級、科目及姓名查詢學生考試成績,年級和科目都是硬碟中的有限數據(資料庫)而學生則可以有用戶手動指定,這時在資料庫中有年級和科目兩張表,每門科目都對應一個年級,所以我們可以用兩個下拉框(Combobox)來存儲年級和科目信息來供用戶選擇。界面如下:
這時如果我們將科目對應的下拉框直接綁定科目表時,用戶選擇一個年級後還要從所有科目中進行選擇就會降低系統的友好性,甚至可能出現沒有任何意義的查詢語句。我們可以先綁定年級下拉框的數據。在年級下拉框中的SelectedIndexChange事件中獲取年級下拉框中的數據(編號)在用得到的數據(年級編號)去查科目表,將對應的科目信息綁定到科目下拉框。
model展開1 int gradeid = Convert.ToInt32(cboGrade.SelectedValue);//獲取選定的年級編號 2 3 List list= subjectBll.GetAllSubject(gradeid);//查詢指定年繼編號下對應的科目信息 4 //綁定科目下拉框 5 cboSubject.ValueMember = "subjectid"; 6 cboSubject.DisplayMember = "subjectname"; 7 cboSubject.DataSource = list; 返回頂部收縮 1 int gradeid = Convert.ToInt32(cboGrade.SelectedValue);//獲取選定的年級編號 2 3 List <Subject> list= subjectBll.GetAllSubject(gradeid);//查詢指定年繼編號下對應的科目信息 4 //綁定科目下拉框 5 cboSubject.ValueMember = "subjectid"; 6 cboSubject.DisplayMember = "subjectname"; 7 cboSubject.DataSource = list;
下拉框的SelectedValue屬性
錯誤分析:經過實驗可以確認將綁定數據源的代碼放在屬性設置的後邊是可以解決這個錯誤的,個人覺得是如果先綁定數據源的話系統會自動將valuemember的屬性值設置為綁定的集合的類型之後再設置Valuemember時系統不會再對其進行更改!