码迷,mamicode.com
首页 > 其他好文 > 详细

ComboBox的数据联动

时间:2016-05-15 18:01:38      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

 

 


 


 

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

 

解析:可以使用 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

 

 

 

 

 

 

ComboBox的数据联动

标签:

原文地址:http://www.cnblogs.com/hq-123/p/5495483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!