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 Kiểu dữ liệu Text(10) Text(255) Date/Time Text(255) Number Text(10)

STT 1 2 3 4 5 6

Tên trường MaHS TenHS NgaySinh DiaChi DTB MaLop

Ghi chú PrimaryKey

ForeignKey (tham chiếu đến Lop(MaLop)

STT 1 2 3

Tên trường MaLop TenLop SiSo

LOP Kiểu dữ liệu Text(10) Text(255) Number

Ghi chú PrimaryKey

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 .

dgHocSinh.Width = 90. dgHocSinh.Columns[1]. .MaHS. h. h.MaLop=l. dgHocSinh.Columns[2].DataSource = getDSHocSinh().Width = 70. connection). LOP l Where h.NgaySinh. return dataSet.Columns[3]. //Load danh sách học sinh lên lưới dgHocSinh.Width = 200.Columns[0]. } Đã hướng dẫn trong tuần 3 Định dạng lưới hiển thị danh sách học sinh Hàm DinhDangLuoi như sau: private void DinhDangLuoi() { dgHocSinh.HeaderText = dgHocSinh. adapter.TenHS.DisplayMember = "TenLop".Columns[3].ValueMember = "MaLop". //Định dạng lưới DinhDangLuoi().Tables[0]. dgHocSinh.Width = 80.HeaderText = dgHocSinh.HeaderText = dgHocSinh.Columns[1].HeaderText = dgHocSinh.TenLop From HOCSINH h. } "Mã HS". "Địa chỉ". 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. "Tên HS". dgHocSinh.HeaderText = dgHocSinh. // Column sẽ được giữ giá trị cboLop. //Load dữ liệu vào comboBox Lớp cboLop.Columns[5]. h. "Ngày sinh".Width = 80.Columns[2].DataSource = getDSLop().Width = 150. } .DiemTB.MaLop". dataSet = new DataSet().Columns[0].mdb").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.Fill(dataSet). l.ReadOnly = true. dgHocSinh.Columns[4]. h.HeaderText = dgHocSinh. "Lớp". "Điểm TB".Columns[4].Columns[5].DiaChi.Trong sự kiện form load. // Column sẽ được hiển thị cboLop.

Value = DateTime. if (row.Text = row.Cells["TenLop"].ToString(). if (rows.Length>0) dtNgaySinh. txtMaHS. EventArgs e) { DataGridViewSelectedRowCollection rows = dgHocSinh. sửa) .Text = row.ToString().Count > 0) { DataGridViewRow row = rows[0].ToString()).Nếu chưa có thì insert (thêm mới) .ToString().Value.Text = row.Cells["MaHS"].ToString().Cells["DiaChi"].ToString().Cells["NgaySinh"]. } } 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? .Value. 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.Value. cboLop.Cells["TenHS"].Value.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. txtDiaChi.Nếu tồn tại thì update (cập nhật.Value. txtTenHS.Text = row.Cells["DiemTB"].SelectedRows.Value.Value.ToString().Text = row.Cells["NgaySinh"]. txtDiemTB.Parse(row.

Nghĩa là đường dẫn kết nối đến CSDL cố định connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.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. 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: .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.mdb vào đúng vị trí đã sử dụng trong chương trình.

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 ??? .

ShowDialog().Title = "Chon CSDL".ShowDialog().FileName.Text. } Viết code cho sự kiện button “Load”: private void btnLoad_Click(object sender.Text = openFileDialog1. Form1 frm = new Form1().Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng Trong class Form1. //Set tên file mặc định openFileDialog1.mdb". Viết code cho sự kiện khi người dùng chọn File : private void btnOK_Click(object sender.Multiselect = false.FileName = "HOCSINH.OK) txtFile.Filter = "File (*. //Hiển thị hộp thoại DialogResult dgResult = openFileDialog1. //Không cho phép chọn nhiều file openFileDialog1. EventArgs e) { Form1. this.mdb)|*. } . //Set caption cho dialog openFileDialog1. frm.cs khai báo biến sPathFilename như sau: public static string sPathFilename = "". if (dgResult == DialogResult.sPathFilename = txtFile.Hide(). EventArgs e) { //Filter file openFileDialog1.mdb".

iii.mdb"). Tìm hiểu các sự kiện của DataGridView c. - Trong sự kiện thoát phải dùng lệnh: Application.Close() dùng để đóng 1 form) Sinh viên phát triển tiếp để hoàn thiện chương trình 3. 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. 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. … .Exit(). 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. Kiểm tra các ràng buộc về dữ liệu b.Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng Như vậy. Bằng dòng lệnh sau: connect(sPathFilename). Bài tập: a. để thoát ứng dụng ( bởi vì this. 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. 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”.

Sign up to vote on this title
UsefulNot useful