Chương 4 Xây dựng các màn hình danh mục
4.6 Màn hình Lý do thanh lý
Chương 4 - Xây dựng các màn hình danh mục
76 STT Tên Control Loại Tên hàm xử lý
1 LDList ListView
2 txtTenLyDo 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 lý do thanh lý cũng được cài đặt thành 2 lớp: Một lớp là LyDoThanhLy_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 - LyDoThanhLy.
4.6.1 Lớp LyDoThanhLy_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 lý do thanh lý đã có trong cơ sở dữ liệu lên trên listview. Do đó, trong hàm LyDoThanhLy_Form_Load ta sẽ gọi hàm HienThiDanhSachLyDo như sau:
Private Sub LyDoThanhLy_Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
HienThiDanhSachLyDo() End Sub
Với hàm HienthiDanhSachLyDo được cài đặt như sau:
Private Sub HienThiDanhSachLyDo() LDList.Items.Clear()
Dim i As Integer Dim str As String Dim dt As DataTable dt = ld.LayDanhSachLyDo 'Hiển thị danh sách lý do For i = 0 To dt.Rows.Count - 1 Dim lvi As ListViewItem
lvi = LDList.Items.Add((i + 1).ToString) str = dt.Rows(i)("TenLyDo")
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 lý do thanh lý được trả ra từ phương thức LayDanhSachLyDo rồi đưa lên trên listview. Còn phương thức LayDanhSachLyDo là một phương thức thuộc lớp LyDoThanhLy, 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 các 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 txtTenLyDo.Text <> "" Then ld.ThemLyDo(txtTenLyDo.Text) HienThiDanhSachLyDo()
MessageBox.Show("Thêm thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information) txtTenLyDo.Text = ""
Else
MessageBox.Show("Bạn chưa nhập Lý do", "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 LDList.SelectedIndices.Count > 0 Then Dim str As String
str =
LDList.Items(LDList.SelectedIndices.Item(0)).SubItems(1).Text() If MessageBox.Show("Bạn có chắc chắn là muốn xóa lý do '" + str
+ "' không ?", "Hỏi lại", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then ld.XoaLydo(LDList.SelectedIndices.Item(0)) HienThiDanhSachLyDo()
Chương 4 - Xây dựng các màn hình danh mục
78
MessageBox.Show("Bạn phải chọn 1 dòng 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 LDList.SelectedIndices.Count > 0 Then If txtTenLyDo.Text <> "" Then
ld.CapNhatLyDo(LDList.SelectedIndices.Item(0), txtTenLyDo.Text)
HienThiDanhSachLyDo()
MessageBox.Show("Lý do '" + txtTenLyDo.Text + "' đã được cập nhật thành công", "Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Information) txtTenLyDo.Text = ""
End If Else
MessageBox.Show("Bạn phải chọn 1 dòng 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
txtTenLyDo.Text = ""
End Sub
Và sau đó chúng ta phát sinh sự kiện SelectedTextChanged của control LDList tương tự như màn hình bằng cấp ở trên, và cài đặt như sau:
Private Sub LDList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles LDList.SelectedIndexChanged
If LDList.SelectedIndices.Count > 0 Then txtTenLyDo.Text =
LDList.Items(LDList.SelectedIndices.Item(0)).SubItems(1).Text End If
End Sub
4.6.2 Lớp LyDoThanhLy
Lớp LyDoThanhLy Thuộc tính
Tên Lớp Ý nghĩa
Db Database Đảm nhiệm việc giao tiếp với
CSDL
tl_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)
LayDanhSachLyDo Lấy danh sách các lý do thanh lý từ cơ sỏ dữ liệu ThemLyDo Thêm 1 lý do thanh lý vào CSDL
XoaLyDo Xóa một lý do thanh lý khỏi CSDL CapNhatLyDo Cập nhật lại thông tin của 1 lý do thanh lý 4.6.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.6.2.2 LayDanhSachLyDo Kết quả trả về:
Kiểu / Lớp Ý nghĩa
DataTable Danh sách các lý do thanh lý có trong CSDL Mã nguồn:
Public Function LayDanhSachLyDo() As DataTable
ld_dt = db.Execute("Select * from LYDOTHANHLY order by TenLyDo") Return ld_dt
End Function
4.6.2.3 ThemLyDo Tham số:
Tên Kiểu / Lớp Ý nghĩa
ten String Tên thể loại sách cần thêm vào (mã thể loại sách tương ứng sẽ được chương trình tự phát sinh)
Mã nguồn:
Public Sub ThemLyDo(ByVal ten As String) Dim dt As DataTable
dt = db.Execute("select MaLyDo from LYDOTHANHLY where MaLyDo >= all (select MaLyDo from LYDOTHANHLY)")
'Chung ta biet chac rang dt chi co 1 dong Dim MaLD As Integer
MaLD = dt.Rows(0)(0) + 1 Dim str As String
str = "Insert into LYDOTHANHLY values(" + MaLD.ToString + ",N'" + ten + "')"
db.ExecuteNonQuery(str)
Chương 4 - Xây dựng các màn hình danh mục
80
Tên Kiểu / Lớp Ý nghĩa
index Integer Số thứ tự của lý do cần xóa. Lưu ý rằng thứ tự các lý do đượ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 XoaLyDo(ByVal index As Integer) Dim str As String
str = "delete from LYDOTHANHLY where MaLyDo = " + ld_dt.Rows(index)("MaLyDo").ToString
db.ExecuteNonQuery(str) 'update data table bc_dt ld_dt.Rows.RemoveAt(index) End Sub
4.6.2.5 CapNhatLyDo Tham số:
Tên Kiểu / Lớp Ý nghĩa
Index Integer Số thứ tự của lý do cần xóa. Lưu ý rằng thứ tự các lý do đượ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 lý do cần cập nhật.
Mã nguồn:
Public Sub CapNhatLyDo(ByVal index As Integer, ByVal ten As String) Dim str As String
str = "Update LYDOTHANHLY set TenLyDo = N'" + ten + "' where MaLyDo
= " + ld_dt.Rows(index)("MaLyDo").ToString db.ExecuteNonQuery(str)
'update data table LayDanhSachLyDo() End Sub