Hdth08 ltudql02-linq

15
LT ng Dng Qu n Lý 2 Contents 1. Đề bài ............................................................................................................................................ 2 2. Hướng d n .................................................................................................................................... 2 2.1. To CSDL.............................................................................................................................. 2 2.2. Thi ế t kế màn hình ................................................................................................................ 7 2.3. To file LINQ........................................................................................................................ 8 2.4. Ch ức năng 1 – Xem danh sách đơn giả n ............................................................................ 9 2.5. Ch ức năng 2 – Tra cứu nhân viên theo đơn vị ................................................................ 11 2.6. Ch ức năng 3 – Lp báo cáo th ng kê ............................................................................... 13 2.7. Ch ức năng 4 – Bsung đơn vị m i ................................................................................... 14 3. Bsung ........................................................................................................................................ 15

Transcript of Hdth08 ltudql02-linq

Page 1: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

Contents

1. Đề bài ............................................................................................................................................ 2

2. Hướng dẫn .................................................................................................................................... 2

2.1. Tạo CSDL.............................................................................................................................. 2

2.2. Thiết kế màn hình ................................................................................................................ 7

2.3. Tạo file LINQ........................................................................................................................ 8

2.4. Chức năng 1 – Xem danh sách đơn giản ............................................................................ 9

2.5. Chức năng 2 – Tra cứu nhân viên theo đơn vị ................................................................ 11

2.6. Chức năng 3 – Lập báo cáo thống kê ............................................................................... 13

2.7. Chức năng 4 – Bổ sung đơn vị mới ................................................................................... 14

3. Bổ sung........................................................................................................................................ 15

Page 2: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

1. Đề bài

Bài tập 01, file bài giảng HDTH_ADO.NET.zip về ADO.NET và 3 layers của thầy

Bùi Tấn Lộc (trong thư mục SourceCode trên moodle)

2. Hướng dẫn

2.1. Tạo CSDL

- Tạo CSDL bằng Microsoft SQL Server, phiên bản 2005.

- Cách tạo: tham khảo các môn học liên quan đến CSDL.

- Ở đây (tại phòng thực hành), để thuận tiện, chúng ta sẽ tạo CSDL dạng file

QuanLyNhanVien.mdf

2.1.1. Khởi động server

(Bước này có thể không cần làm nếu service đã khởi động)

Trước tiên vào Start – Program – Administrative Tools – Services.

Tìm đến service có tên là SQLEXPRESS. Click phải, chọn Properties.

Chọn tab Log On. Chọn vào phần Local System account. Chọn tiếp

Apply/OK

Sau đó click phải vào service SQLEXPRESS và chọn Start. Thao tác này

dùng để khởi động server.

2.1.2. Tạo CSDL

Page 3: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

Qua trở lại việc tạo CSDL QuanLyNhanVien.mdf. Mở Visual Studio (ở đây

là phiên bản 2010), tạo project mới.

Ngôn ngữ: VB.NET.

Dạng: Windows Form Application.

Sau khi tạo Project xong. Chọn Menu Project – Add New Item

Chọn Service – based Database và đặt tên là QuanLyNhanVien.mdf

Màn hình tiếp theo (yêu cầu tạo DataSet), chọn Cancel.

Khi đó bên cửa sổ Solution Explorer ta sẽ có file mới tên là

QuanLyNhanVien.mdf. Nhấp đôi vào file này.

2.1.3. Tạo các bảng

Nhìn qua cửa sổ Server Explorer (thường nằm bên trái) ta thấy như sau.

Click phải vào phần i chọn Add New Table:

Page 4: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

Màn hình ở giữa cho ta nhập thông tin các cột có trong bảng này. Bây giờ,

ta khai báo các cột trong bảng DonVi trước. Lưu ý cột MaDV là kiểu int và

thuộc tính ở bên dưới chọn Is Identity = Yes.

Click phải vào cột MaDV và Set Primary Key.

Thêm một cột TenDV, kiểu là nvarchar(50). Sau đó bấm Ctrl – S để lưu

bảng này với tên là DonVi

Làm tương tự cho bảng NhanVien, với lưu ý cột MaNV có kiểu int, Is

Identity = Yes và là Primary Key. Tất cả các field như sau:

Page 5: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

2.1.4. Tạo quan hệ giữa các bảng

Như vậy, ta vừa tạo xong 2 bảng DonVi và NhanVien. Bây giờ, ta tạo quan

hệ giữa 2 bảng. Click phải vào Database Diagrams, chọn Add New

Diagram.

Chọn Yes. Sau đó chọn 2 bảng và chọn Add/Close

Page 6: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

Rê chuột từ cột MaDV của bảng NhanVien sang cột MaDV của bảng

DonVi.

Chọn đúng tên cột và OK. Ta được kết quả:

Bấm Ctrl – S và đặt tên để lưu Diagram này lại.

Màn hình cảnh báo việc tạo quan hệ có thể ảnh hưởng đến CSDL, hãy chọn

Yes.

2.1.5. Nhập liệu

Page 7: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

Bây giờ ta nhập dữ liệu cho các bảng. Đầu tiên là bảng DonVi. Click phải

vào bảng này và chọn Show Table Data.

Nhập dữ liệu. Lưu ý, ko nhập vào ô MaDV (giá trị ô đó sẽ tự điền)

Tương tự với bảng NhanVien.

Lưu ý: cột NgaySinh (kiểu DateTime), nhập theo định dạng

tháng/ngày/năm và ko cần nhập giờ (giá trị sẽ tự lấy)

2.2. Thiết kế màn hình

Mở lại Form1. Click phải chọn Properties. Sau đó sửa thuộc tính Text của

Form1 là Man hinh chinh

Kéo vào Form1 một MenuStrip và thiết kế menu như sau:

Page 8: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

Lần lượt thêm vào các Form, tương ứng với 4 chức năng trong “Bai tap 1.doc”:

+ frmXemDSDonVi

+ frmTraCuuNVTheoDV

+ frm LapBCTK

+ frm ThemDVMoi

Quay lại Form1, nhấp đôi vào các menu, xử lý sự kiện Click vào từng menu

tương ứng.

Private Sub TraCứuNhânViênTheoĐơnVịToolStripMenuItem_Click(…) Handles TraCứuNhânViênTheoĐơnVịToolStripMenuItem.Click ‘frmYYY là tên form ứng với từng frm cụ thể của từng chức năng Dim frm As New frmYYY frm.ShowDialog() End Sub

2.3. Tạo file LINQ

2.3.1. Hướng dẫn kết nối CSDL tạo từ SQLServer

(Lưu ý, thực hiện bước này nếu ta tự tạo CSDL trên server. Nếu đã tạo

CSDL dạng file mdf như từ nãy giờ thì ko cần thực hiện)

Trong cửa sổ Server Explorer, click phải vào Data connection chọn Add

Connection

Trong Data Source chọn Microsoft SQL Server

Nhập vào ô Server name, chọn tên CSDL và nhấn OK

2.3.2. Tạo file LINQ

Chọn menu Project – Add new item

Chọn loại file là LINQ to SQL Classes và đặt tên file QLNhanVien.dbml

Từ cửa sổ Server Explorer, ta sẽ nhấn shift và chọn 2 bảng NhanVien và

DonVi. Rê chuột, kéo 2 bảng này qua cửa sổ trống ở giữa (cửa sổ

QLNhanVien.dbml) Ta được kết quả như sau:

Page 9: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

Như vậy, 2 bảng trong CSDL là DonVi và NhanVien đã được ánh xạ thành

2 class DonVi và NhanVien trong project đang làm việc.

2.4. Chức năng 1 – Xem danh sách đơn giản

Quay trở lại frmXemDSDonVi, kéo vào đó một DataGridView.

Bấm nút mũi tên ở góc trên, bên phải và chọn Dock in parent container

Hiện tại chưa có cột nào. Click phải vào DataGridView chọn Edit Columns…

Thêm vào đó 3 cột STT, Mã đơn vị và Tên đơn vị. Nhớ check chọn phần

ReadOnly khi tạo cột.

Name Type Header text Visible Readonly

clSTT DataGridViewTextBoxColumn STT X X

clMaDV DataGridViewTextBoxColumn Mã đơn vị X X

Page 10: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

clTenDV DataGridViewTextBoxColumn Tên đơn vị X X

Click phải vào DataGridView, chọn Properties. Sửa lại các thuộc tính:

+ Name = gridViewDSDonVi

+ AllowUserToAddRows = False

+ AllowUserToDeleteRows = False

+ RowHeaderVisible =False

Click phải vào project chọn Add Class. Đặt tên là XLDonVi

Tron class XLDonVi, viết phương thức sau để lấy danh sách đơn vị:

Public Class XLDonVi Public Function LayDSDinVi() As List(Of DonVi) Dim context As QLNhanVienDataContext context = New QLNhanVienDataContext() Return context.DonVis.ToList() End Function Public Sub ThemDonVi(ByVal dv As DonVi) Dim context As QLNhanVienDataContext context = New QLNhanVienDataContext() context.DonVis.InsertOnSubmit(dv) context.SubmitChanges() End Sub End Class

Quay lại frmXemDSDonVi, nhấp đôi vào Form để xử lý sự kiện Load. Sau đó,

viết đoạn code sau trong hàm xử lý sự kiện Load.

Private Sub frmXemDSDonVi_Load(…) Handles MyBase.Load Dim xl As New XLDonVi Dim ds As List(Of DonVi) ds = xl.LayDSDinVi() dgvXemDSDonVi.Rows.Clear() If Not ds Is Nothing Then For i As Integer = 0 To ds.Count - 1 dgvXemDSDonVi.Rows.Add(i + 1, ds(i).MaDV, ds(i).TenDV) dgvXemDSDonVi.Rows(dgvXemDSDonVi.RowCount - 1).Tag = ds(i) Next End If End Sub

Chạy thử ta được:

Page 11: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

2.5. Chức năng 2 – Tra cứu nhân viên theo đơn vị

Thiết kế giao diện cho frmTraCuuNVTheoDV như sau. Sau đó, click phải vào

DataGridView chọn Edit Columns để thêm cột tương ứng với các thông tin của

một NhanVien (nhớ chọn ReadOnly)

Page 12: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

Click phải vào ComboBox, sửa các thuộc tính:

+ Name = cbDSDonVi

+ DropDownStyle = DropDownList

Click phải vào DataGridView sửa các thuộc tính sau:

+ Name = gridViewDSNV

+ AllowUserToAddRows = False

+ AllowUserToDeleteRows = False

+ RowHeaderVisible =False

Đặt tên Button là btnTraCuu.

Xử lý sự kiện Load Form tra cứu:

Private Sub frmTraCuuNVTheoDV_Load(…) Handles MyBase.Load Dim xl As New XLDonVi Dim ds As List(Of DonVi) ds = xl.LayDSDinVi() cbDSDonVi.DataSource = ds cbDSDonVi.DisplayMember = "TenDV" cbDSDonVi.ValueMember = "MaDV" End Sub

Xử lý sự kiện Click nút tra cứu:

Page 13: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

Private Sub btnTraCuu_Click(…) Handles btnTraCuu.Click If cbDSDonVi.SelectedIndex >= 0 Then Dim dv As DonVi dv = cbDSDonVi.Items(cbDSDonVi.SelectedIndex) Dim ds As List(Of NhanVien) ds = dv.NhanViens.ToList() dgvDSNhanVien.Rows.Clear() If Not ds Is Nothing Then For i As Integer = 0 To ds.Count - 1 dgvDSNhanVien.Rows.Add(i + 1, ds(i).MaNV, ds(i).TenNV) dgvDSNhanVien.Rows(dgvDSNhanVien.RowCount - 1).Tag = ds(i) Next End If End If End Sub

Khi chạy, ta có kết quả sau:

2.6. Chức năng 3 – Lập báo cáo thống kê

Kéo vào frmLapBCTK một DataGridView.

+ Dock in parent container.

Thêm vào 2 cột Đơn vị và Số nhân viên.

Sửa thuộc tính của DataGridView:

+ Name = gridViewDSDonVi

+ AllowUserToAddRows = False

+ AllowUserToDeleteRows = False

+ RowHeaderVisible =False

Page 14: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

Xử lý sự kiện Load Form thống kê như sau:

Private Sub frmLapBCTK_Load(…) Handles MyBase.Load Dim xl As New XLDonVi Dim ds As List(Of DonVi) ds = xl.LayDSDinVi() dgvDSDVNV.Rows.Clear() If Not ds Is Nothing Then For i As Integer = 0 To ds.Count - 1 dgvDSDVNV.Rows.Add(ds(i).TenDV, ds(i).NhanViens.Count) Next End If End Sub

Kết quả khi chạy:

2.7. Chức năng 4 – Bổ sung đơn vị mới

Thiết kế giao diện FormThemDVMoi

Đặt tên TextBox = txtTenDV

Đặt tên Button = btnThem

Đặt tên Button = btnThoat

Xử lý sự kiện Click nút Thoát:

Page 15: Hdth08 ltudql02-linq

LT Ứng Dụng Quản Lý 2

Private Sub Button2_Click(…) Handles btnClose.Click Me.Close() End Sub

Viết hàm kiểm tra dữ liệu nhập vào. Hàm này sẽ trả về chuỗi lỗi. Chuỗi lỗi là

rỗng => dữ liệu nhập vào là hợp lệ:

Public Function KiemTraDuLieu() As String Dim str As String str = "" If txtName.Text.Trim() = "" Then str &= "Chưa nhập tên đơn vị" & vbCrLf End If Return str End Function

Quay lại Form thêm đơn vị, xử lý sự kiện Click nút Thêm như sau:

Private Sub x_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles x.Click Dim str As String str = KiemTraDuLieu() If str = "" Then Dim dv As New DonVi With {.TenDV = txtName.Text.Trim()} 'hoac dung 'dv.TenDV = txtName.Text.Trim() Dim xl As New XLDonVi xl.ThemDonVi(dv) MessageBox.Show("Thêm thành công") Else MessageBox.Show(str) End If End Sub

3. Bổ sung

Làm thêm các chức năng:

+ Xóa, sửa đơn vị

+ Thêm, xóa, sửa nhân viên