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\#프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.