• ComboBox的数据联动




    解决问题:当年级下拉框选择一个没有科目的年级后,科目下拉框还是占用了上次有数据的下拉框个数!

    解析:可以使用 cboSubject.DropDownHeight = 106;

    实现效果:

    点击年级下拉框值时,获取科目下拉框值

    一:加载年级下拉框值

    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中判定flag

     

  • 相关阅读:
    JavaStript基础 —— JavaStript语法
    JS拖动滑块验证
    解释型语言和编译型语言、弱类型语言和强类型语言、动态语言和静态语言的区别
    user-select 用户禁止选中
    短地址
    JS实现 Tab栏切换案例
    setAttribute()方法和 getAttribute() 方法
    JS 全局作用域和局部作用域
    数组遍历 forEach 方法
    十进制小数转换为二进制
  • 原文地址:https://www.cnblogs.com/hq-123/p/5495483.html
Copyright © 2020-2023  润新知