C\#ComboBox 의 연동 작업(3 층 구조)

프로젝트 수요:학년 드 롭 다운 상자 의 변화 에 따라 과목 드 롭 다운 상자 가 다음 학년 에 해당 하 는 값 을 연결 합 니 다.

우 리 는 3 층 구조의 모델 로 실현 한다.

1.우 리 는 데이터베이스 와 상호작용 을 하려 면 먼저 DAL 데이터베이스 상호작용 층 을 해결 해 야 한다.

01.학년 드 롭 다운 상자 의 데이터 획득
GradeDAL 클래스 에서

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using MySchool.Model;
using System.Configuration;
namespace MySchool.DAL
{
 //     
 public class GradeDAL
 {
  public static string Constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
  #region      
   public DataTable SelectGrade(string gradetype) 
  {
   //      
   string str = "Data Source=.;initial catalog=MySchool;uid=sa";
   SqlConnection con = new SqlConnection(str);
   string sql = "";
   if (gradetype=="")
   {
    sql = "select * from Grade";
   }
   else
   {
    sql = "select * from Student where GradeId in (select GradeId from Grade where GradeName='" + gradetype + "')";
   }
   
   SqlDataAdapter da = new SqlDataAdapter(sql, con);
   DataSet ds = new DataSet();
   //    
   try
   {
    da.Fill(ds, "stuInfo");
   }
   catch (Exception ex)
   {

    throw new Exception(ex.Message);
   }
   //        
   return ds.Tables["stuInfo"];
  }
  #endregion

  #region       ,        
   //      ,      
   List<Grade> list = new List<Grade>();
   #region    :        
   public DataTable LoadCombox()
   {
    string sql = "select * from Grade";
    DataTable dt = SQLHelper.ExecuteDataTable(sql);
    return dt;
   }
   #endregion

   #region    :        

   public List<Grade> Loadcombox2() 
   {
    string sql = "select * from Grade";
    DataTable dt = SQLHelper.ExecuteDataTable(sql);
    //   :
    foreach (DataRow row in dt.Rows)
    {
     //   row       ,            
     Grade grade = new Grade();
     grade.GradeId = Convert.ToInt32(row["gradeid"]);
     grade.GradeName = row["gradename"].ToString();
     list.Add(grade);
    }
    //   :(  MyTool )

    //MyTool tool=new MyTool();
    //list = tool.DataTableToList<Grade>(dt);
    return list;
   }
  #endregion

   #region    :    using  
   public List<Grade> LoadCombox3() 
   {
    //using         ,       (        )
    using (SqlConnection con=new SqlConnection(Constr))
    {
     try
     {
      string sql = "select * from Grade";
      SqlCommand cmd = new SqlCommand(sql,con);
      con.Open();
      SqlDataReader dr = cmd.ExecuteReader();
      while (dr.Read())
      {
       Grade gr = new Grade();
       gr.GradeId = Convert.ToInt32(dr["GradeId"]);
       gr.GradeName=dr["GradeName"].ToString();
       list.Add(gr);
      }
    
     }
     catch (Exception ex)
     {

      throw new Exception(ex.Message); 
     }
    }
    return list;
   }
  #endregion

   #endregion

  
  

  
 }
}

02.비 즈 니스 논리 층 에서

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySchool.DAL;
using System.Data;
using MySchool.Model;
namespace MySchool.BLL
{
 public class GradeBLL
 {
  GradeDAL gradedal = new GradeDAL();
  #region       ,        

  public DataTable SelectGrade(string gradetype)
  {
   return gradedal.SelectGrade(gradetype);
  }

  public DataTable LoadCombox()
  {
   return gradedal.LoadCombox();
  }
  

  public List<Grade> Loadcombox2()
  {
   return gradedal.Loadcombox2();
  }


  #endregion

  public List<Grade> LoadCombox3()
  {
   return gradedal.LoadCombox3();
  }

  
 }
}

03.창 UI 층 에서
Load 이벤트 에 학년 드 롭 다운 상 자 를 불 러 옵 니 다.

 private void FrmSelectResult_Load(object sender, EventArgs e)
  {
   #region        
   try
   {
    List<Grade> list = gradedal.LoadCombox3();
    list.Insert(0, new Grade() { GradeId=-1,GradeName="--  --" });
    cboGrade.ValueMember = "GradeId";
    cboGrade.DisplayMember = "GradeName";
    cboGrade.DataSource = list;
   }
   catch (Exception ex)
   {

    MessageBox.Show(ex.Message);
   }
   
   
   #endregion

   #region        
   //try
   //{
   // list2 = subjectdal.LoadComboxSub();
   // list2.Insert(0, new Subject() { SubjectId = -1, SubjectName = "--  --" });
   // cboSubject.ValueMember = "SubjectId";
   // cboSubject.DisplayMember = "SubjectName";
   // cboSubject.DataSource = list2;
   //}
   //catch (Exception ex)
   //{

   // MessageBox.Show(ex.Message);
   //}
   
   #endregion
  }

사용 중
학년 드 롭 다운 상자 숨 기 는 방법 얻 기(2)
int num = Convert.ToInt32(cboGrade.SelectedValue);
학년 드 롭 다운 상 자 를 불 러 올 때:잘못된 쓰기
cbograde.DataSource=list;쓰다
 cboGrade.ValueMember = "GradeId";
 cboGrade.DisplayMember = "GradeName";웃 켠
즉:

 #region        
   try
   {
    List<Grade> list = gradedal.LoadCombox3();
    list.Insert(0, new Grade() { GradeId=-1,GradeName="--  --" });
    cboGrade.DataSource = list;
    cboGrade.ValueMember = "GradeId";
    cboGrade.DisplayMember = "GradeName";
    
    
   }
   catch (Exception ex)
   {

    MessageBox.Show(ex.Message);
   }
   
   
   #endregion

다음 오류 가 발생 합 니 다.

학년 Selected IndexChanged 이벤트 에서

 try
   {

    //              
    #region              (1)
    Grade sub = (Grade)cboGrade.SelectedItem;
    int num =sub.GradeId;
    #endregion

    #region              (2)
    // int num = Convert.ToInt32(cboGrade.SelectedValue.ToString());
    #endregion
    
    List<Subject> list = subjectdal.LoadComboxSub2(num);
    
    cboSubject.ValueMember = "SubjectId";
    cboSubject.DisplayMember = "SubjectName";
    cboSubject.DataSource = list;
    

    
   }
   catch (Exception)
   {

    MessageBox.Show("  ");
   }

이상 은 본 고의 모든 내용 입 니 다.여러분 이 C\#프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기