• 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;
            }

    实现效果:

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

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

  • 相关阅读:
    民5需求水平
    Codeforces Beta Round #3 A. Shortest path of the king
    UFLDL接听教程练习(来自编码器和矢量编程疏)
    与我一起extjs5(09--其定义菜单2)
    C++ 堆 和 堆 分析
    Spark Executor Driver资源调度汇总
    通知中心
    Objective-c正确的写法单身
    OpenCV视频播放方法
    设备11g_rac配置对等
  • 原文地址:https://www.cnblogs.com/hr1997/p/5495461.html
Copyright © 2020-2023  润新知