ComboBox的数据联动

实现效果:
点击年级下拉框值时,获取科目下拉框值
一:加载年级下拉框值
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
作者:Monodrama
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。


浙公网安备 33010602011771号