Chương 4 Xây dựng các màn hình danh mục
4.4 Màn hình Loại độc giả
Chương 4 - Xây dựng các màn hình danh mục
66 STT Tên Control Loại Tên hàm xử lý
1 LDGList ListView 2 txtTenLoaiDocGia TextBox
3 btnThem Button btnThem_Click
4 btnXoa Button btnXoa_Click
5 btnCapNhat Button btnCapNhat_Click
6 btnSoanLai Button btnSoanLai_Click
Màn hình loại độc giả được cài đặt thành 2 lớp: Một lớp là LoaiDocGia_Form, lớp Form với các Controls trên nó (như hình trên), lớp còn lại có vai trò xử lý cho form này -LoaiDocGia.
4.4.1 Lớp LoaiDocGia_Form
Trước hết, khi form được load lên ta cần hiển thị các thông tin về các loại độc giả đã có trong cơ sở dữ liệu lên trên listview. Do đó, trong hàm LoaiDocGia_Form_Load ta sẽ gọi hàm HienThiDanhSachLoaiDocGia như sau:
Private Sub LoaiDocGia_Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
HienThiDanhSachLoaiDocGia() End Sub
Với hàm HienthiDanhSachLoaiDocGia được cài đặt như sau:
Private Sub HienThiDanhSachLoaiDocGia() LDGList.Items.Clear()
Dim i As Integer Dim str As String Dim dt As DataTable
dt = ldg.LayDanhSachLoaiDocGia 'Hiển thị danh sách doc gia For i = 0 To dt.Rows.Count - 1 Dim lvi As ListViewItem
lvi = LDGList.Items.Add((i + 1).ToString) str = dt.Rows(i)("TenLoaiDocGia")
lvi.SubItems.Add(str) Next
End Sub
Mục tiêu của hàm này là lấy thông tin các chức vụ được trả ra từ phương thức LayDanhSachLoaiDocGia rồi đưa lên trên listview. Còn phương thức
LayDanhSachLoaiDocGia là một phương thức thuộc lớp LoaiDocGia, sẽ được đề cập trong phần sau.
Tiếp theo, tương tự như trong màn hình bằng cấp, chúng ta phát sinh các sự kiện click cho cac nút nhấn Thêm, Xóa, Cập nhật và Soạn lại và tiến hành cài đặt như sau:
Private Sub btnThem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThem.Click
If txtTenLoaiDocGia.Text <> "" Then
ldg.ThemLoaiDocGia(txtTenLoaiDocGia.Text) HienThiDanhSachLoaiDocGia()
MessageBox.Show("Thêm thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
txtTenLoaiDocGia.Text = ""
Else
MessageBox.Show("Bạn chưa nhập loại độc giả", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If End Sub
Private Sub btnXoa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnXoa.Click
If LDGList.SelectedIndices.Count > 0 Then Dim str As String
str =
LDGList.Items(LDGList.SelectedIndices.Item(0)).SubItems(1).Text If MessageBox.Show("Bạn có chắc chắn là muốn xóa Loại độc giả '"
+ str + "' không ?", "Hỏi lại", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
Chương 4 - Xây dựng các màn hình danh mục
68
End If Else
MessageBox.Show("Bạn phải chọn 1 loại độc giả trong danh sách trước", "Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation) End If
End Sub
Private Sub btnCapNhat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCapNhat.Click
If LDGList.SelectedIndices.Count > 0 Then If txtTenLoaiDocGia.Text <> "" Then
ldg.CapNhatLoaiDocGia(LDGList.SelectedIndices.Item(0), txtTenLoaiDocGia.Text)
HienThiDanhSachLoaiDocGia()
MessageBox.Show("Loại độc giả '" + txtTenLoaiDocGia.Text +
"' đã được cập nhật thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information) txtTenLoaiDocGia.Text = ""
End If Else
MessageBox.Show("Bạn phải chọn 1 loại độc giả trong danh sách trước", "Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation) End If
End Sub
Private Sub btSoanLai_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btSoanLai.Click
txtTenLoaiDocGia.Text = ""
End Sub
Và sau đó chúng ta phát sính sự kiện SelectedTextChanged của control LDGList tương tự như màn hình bằng cấp ở trên, và cài đặt như sau:
Private Sub LDGList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles LDGList.SelectedIndexChanged
If LDGList.SelectedIndices.Count > 0 Then txtTenLoaiDocGia.Text =
LDGList.Items(LDGList.SelectedIndices.Item(0)).SubItems(1).Text End If
End Sub
4.4.2 Lớp LoaiDocGia
Lớp LoaiDocGia Thuộc tính
Tên Lớp Ý nghĩa
Db Database Đảm nhiệm việc giao tiếp với
CSDL
cv_dt DataTable Chứa danh sách các chức vụ
Phương thức
Tên Ý nghĩa
New Hàm tạo (Constructor)
LayDanhSachLoaiDocGia Lấy danh sách các loại độcgiả từ cơ sỏ dữ liệu ThemLoaiDocGia Thêm 1 loại độc giả vào CSDL
XoaLoaiDocGia Xóa một loại độc giả khỏi CSDL CapNhatLoaiDocGia Cập nhật lại thông tin của 1 loại độc giả 4.4.2.1 Hàm tạo
Mã nguồn:
Public Sub New()
db = New Database(MainForm.SvrName, MainForm.DbName, True, "", "")
‘SvrName và DbName là 2 biến tĩnh (shared) của lớp MainForm)
End Sub
4.4.2.2 LayDanhSachLoaiDocGia Kết quả trả về:
Kiểu / Lớp Ý nghĩa
DataTable Danh sách các loại độc giả có trong CSDL Mã nguồn:
Public Function LayDanhSachLoaiDocGia() As DataTable ldg_dt = db.Execute("Select * from LOAIDOCGIA") Return ldg_dt
End Function
4.4.2.3 ThemLoaiDocGia Tham số:
Tên Kiểu / Lớp Ý nghĩa
ten String Tên loại độc giả cần thêm vào (mã loại độc giả tương ứng sẽ được chương trình tự phát sinh)
Mã nguồn:
Public Sub ThemLoaiDocGia(ByVal ten As String) Dim dt As DataTable
dt = db.Execute("select MaLoaiDocGia from LOAIDOCGIA where MaLoaiDocGia >= all (select MaLoaiDocGia from LOAIDOCGIA)") 'Chung ta biet chac rang dt chi co 1 dong
Chương 4 - Xây dựng các màn hình danh mục
70
LayDanhSachLoaiDocGia() End Sub
4.4.2.4 XoaLoaiDocGia Tham số:
Tên Kiểu / Lớp Ý nghĩa
index Integer Số thứ tự của loại độc giả cần xóa. Lưu ý rằng thứ tự các loại độc giả được đưa lên màn hình hiển thị phải giống với thứ tự chúng được lấy ra bằng câu lệnh Select.(chú ý bỏ thuộc tính sort của ListView)
Mã nguồn:
Public Sub XoaLoaiDocGia(ByVal index As Integer) Dim str As String
str = "delete from LOAIDOCGIA where MaLoaiDocGia = " + ldg_dt.Rows(index)("MaLoaiDocGia").ToString
db.ExecuteNonQuery(str) 'update data table ldg_dt ldg_dt.Rows.RemoveAt(index) End Sub
4.4.2.5 CapNhatLoaiDocGia Tham số:
Tên Kiểu / Lớp Ý nghĩa
Index Integer Số thứ tự của loại độc giả cần xóa. Lưu ý rằng thứ tự các loại độc giả được đưa lên màn hình hiển thị phải giống với thứ tự chúng được lấy ra bằng câu lệnh Select.
Ten String Tên loại độc giả cần cập nhật.
Mã nguồn:
Public Sub CapNhatLoaiDocGia(ByVal index As Integer, ByVal ten As String) Dim str As String
str = "Update LOAIDOCGIA set TenLoaiDocGia = N'" + ten + "' where MaLoaiDocGia = " + ldg_dt.Rows(index)("MaLoaiDocGia").ToString db.ExecuteNonQuery(str)
'update data table bc_dt LayDanhSachLoaiDocGia() End Sub