1.实现两级下拉框的联动。
功能:实现点击年级下拉框,加载对应科目的下拉框。
第一步:首先要加载年级下拉框中的数据。
01.在GradeDAL层(数据访问层)写一个方法,查询所有年级的信息。
/// <summary>
/// 从数据库中获取年级信息
/// </summary>
/// <returns>List的集合:年级编号,年级名称</returns>
public List<Grade> SelectGradeInfo()
{
List<Grade> list = new List<Grade>();
string sql = "select * from Grade";
DataTable dt= SQLHelper.ExecuteDataTable(sql);
foreach (DataRow item in dt.Rows)
{
//一个item代表一个行对象
Grade grade = new Grade();
grade.GradeId = Convert.ToInt32(item["GradeID"]);
grade.GradeName=item["GradeName"].ToString();
list.Add(grade);
}
return list;
}
02.在GradeBLL层(业务逻辑层)调用数据访问层的方法,返回给UI层来调用。
public class GradeBLL
{
GradeDAl gd = new GradeDAl();
/// <summary>
/// 从数据库中获取年级信息
/// </summary>
/// <returns>List的集合:年级编号,年级名称</returns>
public List<Grade> SelectGradeInfo()
{
return gd.SelectGradeInfo();
}
}
03.在UI层(表示层)调用GradeBLL层的方法,用List<Grade>类型接收,绑定到下拉框中,实现年级下拉框的绑定。
//加载年级下拉框方法,在Load事件做调用
public void Loadingcbograde()
{
//调用BLL层的方法,用list集合接收
List<Grade> list = gb.SelectGradeInfo();
//绑定显示值。
cbograde.DisplayMember = "gradename";
//绑定隐藏值。
cbograde.ValueMember = "gradeid";
//绑定数据源
cbograde.DataSource = list;
}
第二步:在年级下拉框中的SelectedIndexChanged(属性值更改时触发的事件)通过调用BLL层的方法来加载该年级下对应的科目信息。
01.在SubjectDAL层写一个方法,根据选择的年级获取该年级的隐藏值(也就是年级编号)来查询该年级的科目信息,返回一个subject对象的集合。
/// <summary>
/// 根据选中的年级编号查询该年级下的科目
/// </summary>
/// <returns>科目对象集合</returns>
public List<Subject> SelectSubjectInfos(int id)
{
//根据年级编号查询科目信息
string sql = "select subjectid,subjectname from subject where gradeid=@gradeid";
SqlParameter sp = new SqlParameter("@gradeid", id);
DataTable dt = SQLHelper.ExecuteDataTable(sql,sp);
List<Subject> list = new List<Subject>();
foreach (DataRow item in dt.Rows)
{
Subject subject = new Subject();
subject.SubjectId = Convert.ToInt32(item["Subjectid"]);
subject.SubjectName = item["Subjectname"].ToString();
list.Add(subject);
}
return list;
}
02.在SubjectBLL层调用数据访问层的方法,返回给UI层来调用。
/// <summary>
/// 根据选中的年级编号查询该年级下的科目
/// </summary>
/// <returns>科目对象集合</returns>
public List<Subject> SelectSubjectInfos(int id)
{
return sd.SelectSubjectInfos(id);
}
03.在年级下拉框中的SelectedIndexChanged(属性值更改时触发的事件)调用SubjectBLL层的方法
//实例化SubjectBLL
SubjectBLL sb = new SubjectBLL();
//年级下拉框属性更改值触发的事件
private void cbograde_SelectedIndexChanged(object sender, EventArgs e)
{
//获取年级编号
int id= Convert.ToInt32(cbograde.SelectedValue);
//调用BLL层的方法用Subject类型的集合接收
List<Subject> list= sb.SelectSubjectInfos(id);
//在科目下来框中添加一项全部。
list.Insert(0, new Subject {SubjectId=-1, SubjectName="全部" });
//清空下拉框数据
cbosubject.DataSource = null;
//绑定显示值
cbosubject.DisplayMember = "subjectname";
//绑定隐藏值
cbosubject.ValueMember = "subjectid";
//绑定数据源
cbosubject.DataSource = list;
}