ComboBox的联动

窗体搭建:

ComboBox的联动

实现功能: 加载年级下拉框

选中年级时加载出科目下拉框

加载年级下拉框:

第一步,在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;
}

实现效果:

ComboBox的联动

根据年级编号,加载科目下拉框值

第一步,在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;

实现效果:

ComboBox的联动

但到这里,以上代码实现的功能有一个不可避免的问题

ComboBox的联动

图片解释:

ComboBox的联动

如何解决?

只需要在load事件中写一行代码即可

cboSubject.DropDownHeight = ;

注:出现以下错误的解决方案

ComboBox的联动

1.将DataSource=泛型集合,调整到最后一行

2.用标记,在Load 和SelectedIndexChanged之外,定义一个bool类型变量。然后在Load中设置成True,在SelectedIndexChanged中判定flag

上一篇:【NOIP1999】邮票面值设计 dfs+dp


下一篇:如何使用 Entity Framework 构造动态查询表达式