Bài tập thực hành lập tình trực quan WPF,C#, Quản lý Sách, SQL SERVER +ENTITY Tạo cơ sở dữ liệu quản lý sách đơn giản Database QLSach. Chú ý các Bảng ID đều là tự động tăng IDLoaiSach là khoá chính trong bảng LoaiSach và là khoá ngoại trong bảng Sach
LAB HƯỚNG DẪN XÂY DỰNG ỨNG DỤNG WPF QUẢN LÝ SÁCH WPF + SQL SERVER + ENTITY Tạo sở liệu quản lý sách đơn giản * Database QLSach Chú ý Bảng ID tự động tăng IDLoaiSach khố bảng LoaiSach khoá ngoại bảng Sach - Bảng LoaiSach - Bảng Sach - Bảng NguoiDung - FILE: CREATE DATABASE QLSach; GO USE QLSach; CREATE TABLE NguoiDung ( IDNguoiDung INT IDENTITY(1,1) PRIMARY KEY, TenNguoiDung NVARCHAR(100) NOT NULL, Email NVARCHAR(100), MatKhau NVARCHAR(100) NOT NULL, NgayDangKy DATETIME, VaiTro NVARCHAR(50) ); Tạo bảng LoaiSach CREATE TABLE LoaiSach ( IDLoaiSach INT IDENTITY(1,1) PRIMARY KEY, TenLoaiSach NVARCHAR(150) NOT NULL ); Tạo Sach CREATE TABLE Sach ( IDSach INT IDENTITY(1,1) PRIMARY KEY, MaSach NVARCHAR(10), TenSach NVARCHAR(250) NOT NULL, DonGia DECIMAL(18, 0), SoLuong INT, IDLoaiSach INT NOT NULL, AnhBia NVARCHAR(250), FOREIGN KEY (IDLoaiSach) REFERENCES LoaiSach(IDLoaiSach) ); Chèn liệu tài khoản admin INSERT INTO NguoiDung (TenNguoiDung, Email, MatKhau, NgayDangKy, VaiTro) VALUES ('admin', 'admin@example.com', '123456', GETDATE(), 'ADMIN'); Chèn liệu tài khoản người dùng INSERT INTO NguoiDung (TenNguoiDung, Email, MatKhau, NgayDangKy, VaiTro) VALUES ('user', 'user@example.com', '123456', GETDATE(), 'NGUOIDUNG'); Chèn liệu mẫu vào bảng "LoaiSach" INSERT INTO LoaiSach (TenLoaiSach) VALUES ('CSDL'), ('AI), ('PyThon'); Chèn liệu mẫu vào bảng "Sach" INSERT INTO Sach (MaSach, TenSach, DonGia, SoLuong, IDLoaiSach, AnhBia) VALUES ('S01', 'Database Systems A Pragmatic Approach', 250000, 50, 1, 'avatar_book1.jpg'), ('S02', 'Artificial Intelligence By Example', 180000, 30, 2, 'avatar_book2.jpg'), ('S03', 'Artificial Intelligence Basics: A Non-Technical Introduction', 150000, 60, 2, 'avatar_book3.jpg'), ('S04', 'PyThon Basic', 220000, 40, 3, 'avatar_book4.jpg'); Tạo ứng dụng WPF - Chú ý chọn WPF App (.NET Framework) - Khởi tạo thành công: - Xây dựng giao diện đơn giản hình: - Code tham khảo: Kết nối WPF đến CSDL: - Tạo thư mục Models dự án: + Tại thư mục Models, bấm chuột phải - Chọn ADO.NET Entity Data Model - Chọn hình sau: + Tiến hành sửa liệu sau lưu lại đóng form Insertwindow, liệu DataGrid tải lại - Code Button Sửa: - Code InsertWindow.xaml.cs - Nút lưu xử lý sau: - Thực sửa liệu để kiểm tra 4.4 Xoá liệu - Thực chức xoá + Xoá ghi: + Sinh viên thực xố nhiều ghi chọn 4.5 Tìm kiếm liệu - Hiển thị loại sách vào ô Tìm kiếm: - Thực code kiện combobox thay đổi Item lựa chọn: + Kích đúp vào cbbLoaiSach xuất hàm: cbbLoaiSach_SelectionChanged + Code theo gợi ý: - Sinh viên thêm lọc tìm kiếm tên sách, xếp theo giá, theo số lượng sách Xử lý upload ảnh bìa (Chức nâng cao) - Thêm kiện Click cho button Upload InsertWindow.xaml.cs - Thêm TextBlock name: pathImage để ẩn không để ẩn giao diện: - Code btnUpload_Click: - Sẽ cần hàm HandeUploadImage: - Trong hàm lưu liệu cần code để thực xử lý lưu ảnh Thêm sửa: - Thêm đoạn code xử lý ảnh bìa InsertWindow.xaml.cs: - Để hiển thị ảnh thay đường dẫn DataGrid ta thay đổi sau: - Kết quả: Xử lý đăng nhập ứng dụng Với CSDL tạo có bảng NguoiDung, thực tạo ghi ghi có vai trị “ADMIN”, ghi có vai trị “NGUOIDUNG”: Chèn liệu tài khoản admin INSERT INTO NguoiDung (TenNguoiDung, Email, MatKhau, NgayDangKy, VaiTro) VALUES ('admin', 'admin@example.com', '123456', GETDATE(), 'ADMIN'); Chèn liệu tài khoản người dùng INSERT INTO NguoiDung (TenNguoiDung, Email, MatKhau, NgayDangKy, VaiTro) VALUES ('user', 'user@example.com', '123456', GETDATE(), 'NGUOIDUNG'); - Thực tạo hình LoginWindow, khởi chạy dự án xuất hình Login yêu cầu người dùng nhập thông tin TenNguoiDung MatKhau - Nếu đăng nhập với thông tinTenNguoiDung MatKhau CSDL NguoiDung chuyển đến hình Quản lý sách + Với người dùng có vai trị Admin có đầy đủ quyền thêm, sửa, xố, tìm kiếm liệu sách + Với người dùng có vai trị NguoiDung khố button Thêm, sửa, xố Chỉ cho phép tìm kiếm - Nếu nhập sai thơng tin TenNguoiDung MatKhau đưa cảnh báo nhập lại thông tin Hướng dẫn: - Tạo LoginWindow - Tại: App.xaml chỉnh sửa StartupUri: - Đến bước này, khởi chạy ứng dụng khởi chạy hình đăng nhập tài khoản: - Thực code LoginWindow.xam.xs - Tại MainWindow.xam.cs: - Xong chức đăng nhập đơn giản * Sinh viên tự thực hiện: Các ô nhập input cần xác thực liệu, ví dụ: số khơng cho nhập chữ, nhập khoảng trắng, trường bắt buộc nhập không nhập cần đưa cảnh báo … Xuất liệu sách file Excel - Thêm button Xuất excel - Khi bấm vào button xuất liệu tất sách file exel -> lưu file -> mở file Hướng dẫn thực hiện: - Cài đặt EPPLUS version 4.5.3 ý version cao yêu cầu key, nên sử dụng version 4.5.3 - Cài đặt nuget: - Cài đặt EPPLUS 4.5.3 Sau bấm Install Dưới hình nút Install bị ẩn cài đặt - Code button Xuất excel: + Chi tiết code: private void btnXuatExcel_Click(object sender, RoutedEventArgs e) { try { // Thử lấy danh sách sách từ sở liệu var listSach = db.Saches.ToList(); // Kiểm tra xem danh sách có liệu khơng if (listSach.Count == 0) { MessageBox.Show("Khơng có liệu để xuất!", "Thơng báo", MessageBoxButton.OK, MessageBoxImage.Warning); return; } // Sử dụng thư viện EPPlus để tạo tệp Excel using (var package = new ExcelPackage()) { // Tạo trang tính tệp Excel thiết lập thuộc tính ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sach"); worksheet.Workbook.Properties.Author = "FICT"; worksheet.Workbook.Properties.Title = "DuLieuSach"; worksheet.Cells.Style.Font.Size = 12; worksheet.Cells.Style.Font.Name = "Times New Roman"; // Tạo header cho trang tính string[] arr_col = { "TT", "Tên sách", "Loại sách", "Số lượng", "Đơn giá" }; int colIndex = 1, rowIndex = 1; foreach (string columnName in arr_col) { worksheet.Cells[rowIndex, colIndex].Value = columnName; colIndex++; } // Căn liệu tất trang tính worksheet.Cells[1, 1, listSach.Count + 1, arr_col.Length].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; worksheet.Cells[1, 1, listSach.Count + 1, arr_col.Length].Style.VerticalAlignment = ExcelVerticalAlignment.Center; // Đổ liệu sách vào trang tính foreach (var item in listSach) { colIndex = 1; rowIndex++; worksheet.Cells.Style.Font.Bold = false; worksheet.Cells.Style.WrapText = true; worksheet.Cells[rowIndex, colIndex++].Value = rowIndex - 1; worksheet.Cells[rowIndex, colIndex++].Value = item.TenSach; worksheet.Cells[rowIndex, colIndex++].Value = item.LoaiSach.TenLoaiSach; worksheet.Cells[rowIndex, colIndex++].Value = item.SoLuong; worksheet.Cells[rowIndex, colIndex++].Value = item.DonGia; } // Đặt chiều rộng cột for (int indexCol = 1; indexCol