文章出處

實現效果:

點擊年級下拉框值時,獲取科目下拉框值

一:加載年級下拉框值

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

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()