窗体搭建:
实现功能: 加载年级下拉框
选中年级时加载出科目下拉框
加载年级下拉框:
第一步,在DAL层中写一个方法,检索所有的年级名称集合,返回的是泛型集合List<>
public List<Grade> LoadAllGradeToList() { string sql = "select * from grade"; DataTable dt = SQLHelper.ExecuteDataTable(sql); MyTool tool = new MyTool(); List<Grade> list=tool.DataTableToList<Grade>(dt); return list; }
第二步,在BLL层对DAL层中的所有方法做传递
public class GradeBLL { GradeDAL dal = new GradeDAL(); public List<Grade> getAllGradeList() { return dal.LoadAllGradeToList(); } }
第三步,在load窗体中绑定年级下拉框列
private void FrmSeachByGrade_Load(object sender, EventArgs e) { //绑定年级下拉框 List<Grade> list = grade.LoadAllGradeToList(); cboGrade.ValueMember = "GradeId"; cboGrade.DisplayMember = "GradeName"; cboGrade.DataSource = list; }
实现效果:
根据年级编号,加载科目下拉框值
第一步,在DAL层写一个根据年级编号获取科目集合的方法
public class SubjectDAL { public List<Subject> getAllSubjectByGradeId(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; } }
第二步,在BLL层对DAL层中的所有方法做传递
public class SubjectBLL { SubjectDAL dal = new SubjectDAL(); public List<Subject> getAllSubjectByGradeId(int id) { return dal.getAllSubjectByGradeId(id); } }
第三步,UI层
SubjectBLL subBll = new SubjectBLL(); private void cboGrade_SelectedIndexChanged(object sender, EventArgs e) { int selectid = Convert.ToInt32(cboGrade.SelectedValue); List<Subject> list = subBll.getAllSubjectByGradeId(selectid); cboSubject.ValueMember = "subjectId"; cboSubject.DisplayMember = "subjectName"; cboSubject.DataSource = list;
实现效果:
但到这里,以上代码实现的功能有一个不可避免的问题
图片解释:
如何解决?
只需要在load事件中写一行代码即可
cboSubject.DropDownHeight = 106;
注:出现以下错误的解决方案
1.将DataSource=泛型集合,调整到最后一行
2.用标记,在Load 和SelectedIndexChanged之外,定义一个bool类型变量。然后在Load中设置成True,在SelectedIndexChanged中判定flag