• 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

  • 相关阅读:
    <转载>大白话系列之C#委托与事件讲解(二)
    <转载>C# 类型基础
    <转载>大白话系列之C#委托与事件讲解(三)
    <转载>大白话系列之C#委托与事件讲解大结局
    <转载>C#中父窗口和子窗口之间实现控件互操作
    <转载>C# 中的泛型
    <转载>C# 中的委托和事件
    mailto的用法
    计算器
    终于搞清楚了这句代码的意思
  • 原文地址:https://www.cnblogs.com/jingpeipei/p/5498899.html
Copyright © 2020-2023  润新知