Chương 4 Xây dựng các màn hình danh mục
4.3 Màn hình Chức vụ
Tương tự chúng ta thiết kế màn hình chức vụ như sau
STT Tên Control Loại Tên hàm xử lý
1 CVList ListView
2 txtTenChucVu 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 bằng cấp được cài đặt thành 2 lớp: Một lớp là ChucVu_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 -ChucVu.
4.3.1 Lớp ChucVu_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 chức vụ đã có trong cơ sở dữ liệu lên trên listview. Do đó, trong hàm ChucVu_Form_Load ta sẽ gọi hàm
HienThiDanhSachChucVu như sau:
Private Sub ChucVu_Form_Load(ByVal sender As System.Object, ByVal e As
Chương 4 - Xây dựng các màn hình danh mục
62
CVList.Items.Clear() Dim i As Integer Dim str As String Dim dt As DataTable
dt = cv.LayDanhSachChucVu 'Hiển thị danh sách chuc vu For i = 0 To dt.Rows.Count - 1 Dim lvi As ListViewItem
lvi = CVList.Items.Add((i + 1).ToString) str = dt.Rows(i)("TenChucVu")
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
LayDanhSachChucVu rồi đưa lên trên listview. Còn phương thức LayDanhSachChucVu là một phương thức thuộc lớp ChucVu, 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 txtTenChucVu.Text <> "" Then cv.ThemChucVu(txtTenChucVu.Text) HienThiDanhSachChucVu()
MessageBox.Show("Thêm thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information) txtTenChucVu.Text = ""
Else
MessageBox.Show("Bạn chưa nhập tên chức vụ", "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 CVList.SelectedIndices.Count > 0 Then Dim str As String
str =
CVList.Items(CVList.SelectedIndices.Item(0)).SubItems(1).Text If MessageBox.Show("Bạn có chắc chắn là muốn xóa chức vụ '" +
str + "' không ?", "Hỏi lại", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
cv.XoaChucVu(CVList.SelectedIndices.Item(0)) CVList.Items.Remove(CVList.SelectedItems(0)) 'Thông báo xóa thành công
MessageBox.Show("Chức vụ '" + txtTenChucVu.Text + "' đã được xóa.", "Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Information) txtTenChucVu.Text = ""
End If Else
MessageBox.Show("Bạn phải chọn 1 chức vu 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 CVList.SelectedIndices.Count > 0 Then If txtTenChucVu.Text <> "" Then
cv.CapNhatChucVu(CVList.SelectedIndices.Item(0), txtTenChucVu.Text)
HienThiDanhSachChucVu()
MessageBox.Show("Chức vụ '" + txtTenChucVu.Text + "' đã được cập nhật thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
txtTenChucVu.Text = ""
End If Else
MessageBox.Show("Bạn phải chọn 1 chức vụ 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
txtTenChucVu.Text = ""
End Sub
Và sau đó chúng ta phát sính sự kiện SelectedTextChanged của control CVList tương tự như màn hình bằng cấp ở trên, và cài đặt như sau:
Private Sub BPList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles BPList.SelectedIndexChanged
If BPList.SelectedIndices.Count > 0 Then txtTenBoPhan.Text =
BPList.Items(BPList.SelectedIndices.Item(0)).SubItems(1).Text End If
End Sub
4.3.2 Lớp ChucVu
Lớp ChucVu Thuộc tính
Tên Lớp Ý nghĩa
Chương 4 - Xây dựng các màn hình danh mục
64 LayDanhSachChucVu Lấy danh sách các chức vụ từ cơ sỏ dữ liệu
ThemChucVu Thêm 1 chức vụ vào CSDL XoaChucVu Xóa một chức vụ khỏi CSDL CapNhatChucVu Cập nhật lại thông tin của 1 chức vụ 4.3.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.3.2.2 LayDanhSachChucVu Kết quả trả về:
Kiểu / Lớp Ý nghĩa
DataTable Danh sách các loại chức vụ có trong CSDL Mã nguồn:
Public Function LayDanhSachChucVu() As DataTable
cv_dt = db.Execute("Select * from CHUCVU order by MaChucVu") Return cv_dt
End Function
4.3.2.3 ThemChucVu Tham số:
Tên Kiểu / Lớp Ý nghĩa
ten String Tên loại chức vụ cần thêm vào (mã loại chức vụ tương ứng sẽ được chương trình tự phát sinh)
Mã nguồn:
Public Sub ThemChucVu(ByVal ten As String) Dim dt As DataTable
dt = db.Execute("select MaChucVu from CHUCVU where MaChucVu >= all (select MaChucVu from CHUCVU)")
'Chung ta biet chac rang dt chi co 1 dong Dim MaCV As Integer
MaCV = dt.Rows(0)(0) + 1 Dim str As String
str = "Insert into CHUCVU values(" + MaCV.ToString + ",N'" + ten +
"')"
db.ExecuteNonQuery(str) 'Cap nhaT cv_dt
Dim dr As DataRow dr = cv_dt.NewRow dr(0) = MaCV dr(1) = ten
cv_dt.Rows.Add(dr) End Sub
4.3.2.4 XoaChucVu Tham số:
Tên Kiểu / Lớp Ý nghĩa
index Integer Số thứ tự của chúc vụ cần xóa. Lưu ý rằng thứ tự các chức vụ đượ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 XoaChucVu(ByVal index As Integer) Dim str As String
str = "delete from CHUCVU where MaChucVu = " + cv_dt.Rows(index)("MaChucVu").ToString
db.ExecuteNonQuery(str) 'update data table cv_dt cv_dt.Rows.RemoveAt(index) End Sub
4.3.2.5 CapNhatChucVu Tham số:
Tên Kiểu / Lớp Ý nghĩa
Index Integer Số thứ tự của chức vụ cần xóa. Lưu ý rằng thứ tự các chức vụ đượ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 chức vụ cần cập nhật.
Mã nguồn:
Public Sub CapNhatChucVu(ByVal index As Integer, ByVal ten As String) Dim str As String
str = "Update CHUCVU set TenChucVu = N'" + ten + "' where MaChucVu =
" + cv_dt.Rows(index)("MaChucVu").ToString db.ExecuteNonQuery(str)
'update data table cv_dt Dim dr As DataRow
dr = cv_dt.Rows(index) dr(1) = ten
End Sub