Xây dng phn mm hướng đối tượng GVHD: Trn Anh Dũng
HƯỚNG DN THC HÀNH TUN 4
Ch đề: ADO.NET (tt)
Phn 1: Các thao tác kết ni ADO.NET s dng cu trúc dòng lnh vi
namespace System.Data (tt).
1. Thiết kế CSDL:
a. S dng li CSDL ca tun trước (QLHOCSINH.mdb)
HOCSINH
STT Tên trường Kiu d liu Ghi chú
1 MaHS Text(10) PrimaryKey
2 TenHS Text(255)
3 NgaySinh Date/Time
4 DiaChi Text(255)
5 DTB Number
6 MaLop Text(10) ForeignKey (tham chiếu đến
Lop(MaLop)
LOP
STT Tên trường Kiu d liu Ghi chú
1 MaLop Text(10) PrimaryKey
2 TenLop Text(255)
3 SiSo Number
2. S dng li ng dng đã được hướng dn trong tun 3:
Thiết kế li Form “Nhp thông tin hc sinh” như màn hình sau:
Xây dng phn mm hướng đối tượng GVHD: Trn Anh Dũng
Kết qu màn hình khi chy:
DataGridView
Xây dng phn mm hướng đối tượng GVHD: Trn Anh Dũng
Viết hàm để load danh sách hc sinh vào DataGridView
- Ta viết hàm getDSHocSinh có nhim v tr v bng thông tin hc sinh như sau:
private DataTable getDSHocSinh()
{
adapter = new OleDbDataAdapter("Select h.MaHS, h.TenHS, h.NgaySinh,
h.DiaChi, h.DiemTB, l.TenLop From HOCSINH h, LOP l
Where h.MaLop=l.MaLop", connection);
dataSet = new DataSet();
adapter.Fill(dataSet);
return dataSet.Tables[0];
}
- Trong s kin form load, ta gi hàm getDSHocSinh và gán kết qu cho datasource ca
DataGridView
private void Form1_Load(object sender, EventArgs e)
{
connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb");
//Load d liu vào comboBox Lp
cboLop.DataSource = getDSLop();
// Column s được hin th
cboLop.DisplayMember = "TenLop";
// Column s được gi giá tr
cboLop.ValueMember = "MaLop";
//Load danh sách hc sinh lên lưới
dgHocSinh.DataSource = getDSHocSinh();
//Định dng lưới
DinhDangLuoi();
}
Hàm DinhDangLuoi như sau:
private void DinhDangLuoi()
{
dgHocSinh.ReadOnly = true;
dgHocSinh.Columns[0].HeaderText = "Mã HS";
dgHocSinh.Columns[0].Width = 70;
dgHocSinh.Columns[1].HeaderText = "Tên HS";
dgHocSinh.Columns[1].Width = 150;
dgHocSinh.Columns[2].HeaderText = "Ngày sinh";
dgHocSinh.Columns[2].Width = 90;
dgHocSinh.Columns[3].HeaderText = "Địa ch";
dgHocSinh.Columns[3].Width = 200;
dgHocSinh.Columns[4].HeaderText = "Đim TB";
dgHocSinh.Columns[4].Width = 80;
dgHocSinh.Columns[5].HeaderText = "Lp";
dgHocSinh.Columns[5].Width = 80;
}
Đã hướng dn
trong tun 3
Định dng lưới hin th
danh sách h
c sinh
Xây dng phn mm hướng đối tượng GVHD: Trn Anh Dũng
Khi người dùng chn mt row (chn 1 hc sinh) trên lưi
hin th thông
tin hc sinh va chn lên các control trên form để chnh sa và cp nht
thông tin.
Vy gii pháp x lý ???
Sinh viên cn phi Tìm hiu các s kin phát sinh trên lưới DataGridView
Trong trường hp này chúng ta x lý s kin SelectionChanged:
private void dgHocSinh_SelectionChanged(object sender, EventArgs e)
{
DataGridViewSelectedRowCollection rows = dgHocSinh.SelectedRows;
if (rows.Count > 0)
{
DataGridViewRow row = rows[0];
txtMaHS.Text = row.Cells["MaHS"].Value.ToString();
txtTenHS.Text = row.Cells["TenHS"].Value.ToString();
if (row.Cells["NgaySinh"].Value.ToString().Length>0)
dtNgaySinh.Value =
DateTime.Parse(row.Cells["NgaySinh"].Value.ToString());
txtDiaChi.Text = row.Cells["DiaChi"].Value.ToString();
txtDiemTB.Text = row.Cells["DiemTB"].Value.ToString();
cboLop.Text = row.Cells["TenLop"].Value.ToString();
}
}
Sinh viên phi x lý Khi tiến hành lưu thông tin ca mt hc sinh vào bng
HOCSINH phi kim tra xem có tn ti hc sinh này trong CSDL chưa?
- Nếu chưa có thì insert (thêm mi)
- Nếu tn ti thì update (cp nht, sa)
Xây dng phn mm hướng đối tượng GVHD: Trn Anh Dũng
Khó khăn gp phi ca người dùng: phi chép file HOCSINH.mdb vào đúng
v trí đã s dng trong chương trình. Nghĩa là đường dn kết ni đến CSDL
c định
connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb");
Nếu trên máy tính không tn ti đường dn này s phát sinhh li và dng chương trình.
Gii pháp khc phc tình trng này ???
Cho phép người dùng ch ra đường dn vt lý lưu tr CSDL (chn đường
dn lưu tr CSDL)
Bước 1: Add thêm mt form mi (frmSelectPath) vào Project
Thiết kế giao din cho Form mi như sau: