Tải bản đầy đủ (.pdf) (8 trang)

Hướng Dẫn Thực Hành Winform - phần 4 ADO.NET (tt) pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (574.23 KB, 8 trang )

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

×