
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
HƯỚNG DẪN THỰC HÀNH TUẦN 4
Chủ đề: ADO.NET (tt)
Phần 1: Các thao tác kết nối ADO.NET sử dụng cấu trúc dòng lệnh với
namespace System.Data (tt).
1. Thiết kế CSDL:
a. Sử dụng lại CSDL của tuần trước (QLHOCSINH.mdb)
HOCSINH
STT Tên trường Kiểu dữ liệu 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 Kiểu dữ liệu Ghi chú
1 MaLop Text(10) PrimaryKey
2 TenLop Text(255)
3 SiSo Number
2. Sử dựng lại ứng dụng đã được hướng dẫn trong tuần 3:
Thiết kế lại Form “Nhập thông tin học sinh” như màn hình sau:

Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
Kết quả màn hình khi chạy:
DataGridView

Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
Viết hàm để load danh sách học sinh vào DataGridView
- Ta viết hàm getDSHocSinh có nhiệm vụ trả về bảng thông tin học 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ự kiện form load, ta gọi hàm getDSHocSinh và gán kết quả cho datasource của
DataGridView
private void Form1_Load(object sender, EventArgs e)
{
connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb");
//Load dữ liệu vào comboBox Lớp
cboLop.DataSource = getDSLop();
// Column sẽ được hiển thị
cboLop.DisplayMember = "TenLop";
// Column sẽ được giữ giá trị
cboLop.ValueMember = "MaLop";
//Load danh sách học sinh lên lưới
dgHocSinh.DataSource = getDSHocSinh();
//Định dạng 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 = "Điểm TB";
dgHocSinh.Columns[4].Width = 80;
dgHocSinh.Columns[5].HeaderText = "Lớp";
dgHocSinh.Columns[5].Width = 80;
}
Đã hướng dẫn
trong tuần 3
Định dạng lưới hiển thị
danh sách h
ọc sinh

Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
Khi người dùng chọn một row (chọn 1 học sinh) trên lưới
hiển thị thông
tin học sinh vừa chọn lên các control trên form để chỉnh sửa và cập nhật
thông tin.
Vậy giải pháp xử lý ???
Sinh viên cần phải Tìm hiểu các sự kiện phát sinh trên lưới DataGridView
Trong trường hợp này chúng ta xử lý sự kiện 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 phải xử lý Khi tiến hành lưu thông tin của một học sinh vào bảng
HOCSINH phải kiểm tra xem có tồn tại học sinh này trong CSDL chưa?
- Nếu chưa có thì insert (thêm mới)
- Nếu tồn tại thì update (cập nhật, sửa)

Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
Khó khăn gặp phải của người dùng: phải chép file HOCSINH.mdb vào đúng
vị trí đã sử dụng trong chương trình. Nghĩa là đường dẫn kết nối đến CSDL
cố định
connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb");
Nếu trên máy tính không tồn tại đường dẫn này sẽ phát sinhh lỗi và dừng chương trình.
Giải pháp khắc phục tình trạng này ???
Cho phép người dùng chỉ ra đường dẫn vật lý lưu trữ CSDL (chọn đường
dẫn lưu trữ CSDL)
Bước 1: Add thêm một form mới (frmSelectPath) vào Project
Thiết kế giao diện cho Form mới như sau:

