Xây dựng phần mềm hướng đối tượng - Hướng dẫn thực hành tuần 4: ADO.NET

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)

pdf8 trang | Chuyên mục: Visual C# | Chia sẻ: dkS00TYs | Lượt xem: 1731 | Lượt tải: 2download
Tóm tắt nội dung Xây dựng phần mềm hướng đối tượng - Hướng dẫn thực hành tuần 4: ADO.NET, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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: 
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng 
Form “frmSelectPath” phải được chạy đầu tiên ??? 
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng 
Trong class Form1.cs khai báo biến sPathFilename như sau: 
public static string sPathFilename = ""; 
Viết code cho sự kiện khi người dùng chọn File : 
 private void btnOK_Click(object sender, EventArgs e) 
{ 
//Filter file 
 openFileDialog1.Filter = "File (*.mdb)|*.mdb"; 
//Không cho phép chọn nhiều file 
 openFileDialog1.Multiselect = false; 
 //Set caption cho dialog 
openFileDialog1.Title = "Chon CSDL"; 
 //Set tên file mặc định 
openFileDialog1.FileName = "HOCSINH.mdb"; 
 //Hiển thị hộp thoại 
DialogResult dgResult = openFileDialog1.ShowDialog(); 
 if (dgResult == DialogResult.OK) 
 txtFile.Text = openFileDialog1.FileName; 
} 
Viết code cho sự kiện button “Load”: 
private void btnLoad_Click(object sender, EventArgs e) 
{ 
Form1.sPathFilename = txtFile.Text; 
 Form1 frm = new Form1(); 
 this.Hide(); 
 frm.ShowDialog(); 
} 
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng 
Như vậy, trong Form1 chúng ta sửa lại như sau: 
- Trong sự kiện Form1_Load thay dòng lệnh 
connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb"); 
Bằng dòng lệnh sau: 
connect(sPathFilename); 
- Trong sự kiện thoát phải dùng lệnh: Application.Exit(); để thoát ứng dụng ( bởi vì 
this.Close() dùng để đóng 1 form) 
Sinh viên phát triển tiếp để hoàn thiện chương trình 
3. Bài tập: 
a. Kiểm tra các ràng buộc về dữ liệu 
b. Tìm hiểu các sự kiện của DataGridView 
c. Cải tiến màn hình giao diện nhập thông tin học sinh để người dùng thao tác tiện 
lợi và thật nhanh chóng 
i. Thiết kế lại giao diện cho phép nhập danh sách học sinh trực tiếp trên lưới 
(tượng tự như nhập liệu trên file Excel) 
ii. Tìm hiểu việc add một số control vào các cột trên DataGridView (Ví dụ: cột 
ngày sinh phải add control “chọn ngày tháng năm”, cột Lớp phải add control 
“ComboBox” và load dữ liệu vào comboBox cho phép chọn lựa trong khi nhập 
liệu. 
iii. … 

File đính kèm:

  • pdfXây dựng phần mềm hướng đối tượng - Hướng dẫn thực hành tuần 4 ADO.NET.pdf