文章出處
文章列表
實現效果:
點擊年級下拉框值時,獲取科目下拉框值
一:加載年級下拉框值
GradeDAL層:
//檢索所有年級名稱集合,返回的是泛型集合List<Grade> public List<Grade> GetAllGrade() { string sql = "select * from Grade"; //將sql轉成內存中的一張表 DataTable dt = SQLHelper.ExecuteDataTable(sql); MyTool tool = new MyTool(); //dt轉成list List<Grade> list = tool.DataTableToList<Grade>(dt); return list; }
GradeBLL層:
//植入DAL層的對象 GradeDAL gradeDal=new GradeDAL(); public List<Grade> GetAllGrade() { return gradeDal.GetAllGrade(); }
UI層:
private void frmSelectResult_Load(object sender, EventArgs e) { //清空 cboSubject.DropDownHeight = 106; GradeBLL gradeBll = new GradeBLL(); //對年級下拉框綁定數據 List<Grade> list = gradeBll.GetAllGrade(); cboGrade.ValueMember = "GradeId"; cboGrade.DisplayMember = "GradeName"; cboGrade.DataSource = list; // flag = true; }
二:根據年級編號,去加載科目下拉框數據
1.在DAL層寫一個根據年級編號獲取科目集合的方法
SubjectDAL層:
public List<Subject> GetAllSubject(int id) { string sql = "select * from Subject where GradeId=@Id"; SqlParameter para = new SqlParameter("@Id",id); DataTable dt = SQLHelper.ExecuteDataTable(sql,para); MyTool tool = new MyTool(); List<Subject> list= tool.DataTableToList<Subject>(dt); return list; }
2.Bll層做數據傳遞
SubjectDAL subjectDal = new SubjectDAL(); public List<Subject> GetAllSubject(int id) { return subjectDal.GetAllSubject(id); }
3.UI層 下拉框選中項發生改變的事件:SelectedIndexChanged
SubjectBLL subBll = new SubjectBLL(); private void cboGrade_SelectedIndexChanged(object sender, EventArgs e) { // if (flag) // { int selectid = Convert.ToInt32(cboGrade.SelectedValue); List<Subject> list = subBll.GetAllSubject(selectid); cboSubject.ValueMember = "SubjectId"; cboSubject.DisplayMember = "SubjectName"; cboSubject.DataSource = list; //} }
注:
解決方案:
1.若碰到IConvertable錯誤的時候,如果是下拉框數據綁定,規避的方案:
將DataSource=泛型集合,調整到最后一行
2.用標記,在Load 和SelectedIndexChanged之外,定義一個bool類型變量。
然后在Load中設置成True,在SelectedIndexChanged中判定fla
當年級下拉框選擇一個沒有科目的年級后,科目下拉框還是占用了上次有數據的下拉框個數!
解析:可以使用 cboSubject.DropDownHeight = 106
文章列表
全站熱搜