GIỚI THIỆU ĐỒ ÁN CỦA HP 21 1.1 Tổng quan về ĐỒ ÁN HỌC PHẦN
Công cụ và nền tảng kỹ thuật thực hiện ĐỒ ÁN HỌC PHẦN
+ ASP.NET 4.7.2 trên MS Visual Studio NET 2019
+ Hệ quản trị CSDL MS SQL Server 2014 trên Local
+ Free Host Web: some.com
Sản phẩm của ĐỒ ÁN HỌC PHẦN
+ Hệ thống WebApp bán đồ ăn thú cưng trực tuyến (online) dạng Local trên PC:
+ Hệ thống WebApp bán đồ ăn thú cưng trực tuyến (online) dạng Online trên somee: http://doanpetg308nvqhuy.somee.com OR http://www.doanpetg308nvqhuy.somee.com
Bố cục của báo cáo
Báo cáo gồm những nội dung như sau:
Chương 1 Giới thiệu đồ án của HP là Hệ thống WebApp bán đồ ăn thú cưng trực tuyến
(online) Chương 2 Các cơ sở lý thuyết của HP Lập trình Web (4 TC) phục việc thực hiện đề tài HP Chương 3 Thiết kế và cập nhật CSDL phục vụ WebApp bán đồ ăn thú cưng
Chương 4 Thiết kế và lập trình WebApp phần giao dịch trực tuyến của khách hàng mua đồ thú cưng
Chương 5 Thiết kế và lập trình WebApp phần quản lý trực tuyến của cơ sở bán đồ ăn thú cưng Chương 6 Triển khai và phát hành WebApp bán đồ ăn thú cưng trực tuyến trên Host: somee Chương 7 Tổng kết các kết quả đạt được và còn hạn chế của đồ án, đồng thời đề xuất hướng khắc phục hạn chế và phát triển Đồ án.
CƠ SỞ LÝ THUYẾT CỦA HỌC PHẦN 23 2.1 Giới thiệu về lập trình WebApp trên ASP.NET
Phát triển WebApp ASP.NET đơn giản có CSDL dùng ADO.NET
2.3.1 Căn bản về MASTER PAGE
2.3.1.1.Khái niệm Masterpage (mẫu trang web)
2.3.1.1.2 Số lượng Masterpage trong 1 Websites
2.3.1.1.3 Các thành phần trên Masterpage
2.3.1.3.Xây dựng Mẫu trang (Masterpage)
2.3.1.3.2 VIẾT THỦ TỤC ẨN / HIỆN Login
2.4 Phát triển các chức năng GIAO DỊCH trên WebApp ASP.NET
2.4.1 Trưng bày sản phẩm (dịch vụ) trên DataList
2.4.3 Đặt hàng và thanh toán
2.5 Phát triển các chức năng QUẢN LÝ trên WebApp ASP.NET
2.5.1 Quản lý đăng nhập và bảo mật
2.5.3 Các chức năng thao tác dữ liệu: Thêm _ Sửa _ Xóa
2.6 Xử lý Ràng buộc toàn vẹn dữ liệu (RBTV) trên CSDL trong
2.6.1 Giới thiệu về lập trình xử lý RBTV dữ liệu trên CSDL trong ASP.NET
Master Page = Mẫu trang web
2.3.1 Căn bản về MASTER PAGE
2.3.1.1.Khái niệm Masterpage (mẫu trang web)
2.3.1.1.2 Số lượng Masterpage trong 1 Websites
2.3.1.1.3 Các thành phần trên Masterpage
2.3.1.3.Xây dựng Mẫu trang (Masterpage)
2.3.1.3.2 VIẾT THỦ TỤC ẨN / HIỆN Login
Phát triển các chức năng GIAO DỊCH trên WebApp ASP.NET
2.4.1 Trưng bày sản phẩm (dịch vụ) trên DataList
2.4.3 Đặt hàng và thanh toán
Phát triển các chức năng QUẢN LÝ trên WebApp ASP.NET
2.5.1 Quản lý đăng nhập và bảo mật
2.5.3 Các chức năng thao tác dữ liệu: Thêm _ Sửa _ Xóa
Xử lý Ràng buộc toàn vẹn dữ liệu (RBTV) trên CSDL trong ASP.NET
2.6.1 Giới thiệu về lập trình xử lý RBTV dữ liệu trên CSDL trong ASP.NET
2.6.2 Thiết kế hệ thống xử lý RBTV dữ liệu
2.6.3 Lập trình hệ thống xử lý RBTV dữ liệu
Lập trình thủ tục Chuyển nhóm dữ liệu trong ASP.NET
2.7.1 Giới thiệu về lập trình Chuyển nhóm dữ liệu trên CSDL trong ASP.NET 2.7.2 Thiết kế hệ thống xử lý Chuyển nhóm dữ liệu
2.7.3 Lập trình hệ thống xử lý Chuyển nhóm dữ liệu
Lập trình thủ tục giao dịch Đặt hàng (Order)
2.8.1 Giới thiệu về lập trình xử lý giao dịch đặt hàng trong ASP.NET
2.8.3 Chức năng đơn đặt hàng
2.8.4 Chức năng chi tiết đơn hàng
2.8.5 Xử lý lưu trữ vào DB
Triển khai phát hành WebApp ASP.NET trên Internet (hoặc Intranet)
Giới thiệu về lập trình WebApp trên PHP
Chương 3: THIẾT KẾ VÀ CẬP NHẬT CSDL PHỤC VỤ
Phân tích và thiết kế DB
Hệ thống DB phục vụ hoạt động WebApp bán đồ ăn thú cưng trực tuyến như sau:
+ Thành phần chính là bảng danh mục đồ ăn ( DanhMucDoAn ) gồm các thuộc tính về thông tin đồ ăn thú cưng: mã số đồ ăn (msda), mã số loại đồ ăn (msda), mã số nhà sản xuất (msnsx), tên đồ ăn (tenda), giá bán (giaban), đơn vị tính (dvt), ngày sản xuất (nsx), hạn sử dụng (hsd), khối lượng (khoiluong), thành phần (thanhphan), hướng dẫn sử dụng (hdsudung), hình ảnh (hinh ảnh) và mô tả (mota).
+ Mỗi đồ ăn thú cưng được sản xuất bởi một nhà sản xuất Bảng nhà sản xuất ( NhaSanXuat ) gồm các thuộc tính sau: mã nhà sản xuất (msnsx), tên nhà sản xuất (tennsx), quốc gia (quocgia), địa chỉ (diachi), số điện thoại (sdt) và mô tả (mota).
+ Mỗi đồ ăn thú cưng chỉ dành cho một loại thú cưng Bảng loại đồ ăn ( LoaiDoAn ) gồm các thuộc tính sau: mã số loại (msloai), tên loại (tenloai) và mô tả (mota).
+ Mỗi đồ ăn thú cưng có thể được bán tại nhiều cửa hàng khác nhau trên nhiều khu vực Bảng cửa hàng ( CuaHang ) gồm các thuộc tính sau: mã số cửa hàng (msch), mã số khu vực (mskv), tên cửa hàng (tench), địa chỉ (diachi), số điện thoại (sdt), sức chứa (succhua) và còn trống (controng)
+ Trong mỗi cửa hàng sẽ ghi lại số liệu tồn của mỗi đồ ăn thú cưng; bảng tồn cửa hàng ( TonCuaHang ) gồm các thuộc tính sau: mã số cửa hàng (msch), mã số đồ ăn (msda) và số lượng tồn (soluongton).
+ Khi khách hàng đặt đồ ăn thú cưng trực tuyến, mỗi đơn đặt hàng có thể có một hoặc nhiều đồ ăn thú cưng và ngược lại một đồ ăn thú cưng có thể được đặt trong một hoặc nhiều đơn đặt hàng khác nhau Bảng đơn đặt hàng ( DonDatHang ) gồm các thuộc tính sau: mã số đơn đặt hàng (msddh), mã số nhân viên (msnv), mã số khu vực (mskv), người nhận
(nguoinhan), địa chỉ giao (diachigiao), thời hạn (thoihan), tình trạng đơn đặt hàng (tinhtrang) và ghi chú (ghichu)
+ Trong mỗi đơn đặt hàng cho biết số lượng của mỗi đồ ăn thú cưng được đặt; bảng chi tiết đơn đặt hàng ( CTDDH ) gồm các thuộc tính: mã số đơn đặt hàng (msddh), mã số đồ ăn (msda) và số lượng đặt của mỗi đồ ăn thú cưng (soluong).
+ Nhân viên làm việc tại cửa hàng thuộc khu vực đã được phân công khi được tuyển vào làm Một nhân viên có thể nhận một hoặc nhiều đơn đặt hàng và mỗi đơn đặt hàng chỉ được phụ trách bởi một nhân viên Bảng nhân viên ( NhanVien ) gồm các thuộc tính sau: mã số nhân viên (msnv), mã số khu vực (mskv), tên nhân viên (tennv), ngày sinh (ngaysinh), giới tính (gioitinh), địa chỉ (diachi) và số điện thoại (sdt).
+ Mỗi khu vực sẽ có một hoặc nhiều cửa hàng được mở tại khu vực đó Mỗi khu vực có thể có một hoặc nhiều đơn đặt hàng và sẽ có một hay nhiều nhân viên làm việc tại khu vực đó Bảng khu vực ( KhuVuc) gồm các thuộc tính sau: mã số khu vực (mskv) và tên khu vực (tenkv).
+ Khách hàng là những người sử dụng truy cập vào WebApp bán đồ ăn thú cưng và chọn các đồ ăn thú cưng phù hợp thú cưng của họ Một khách hàng có thể đặt một hoặc nhiều đơn đặt hàng và một đơn đặt hàng chỉ được đặt bởi một khách hàng Bảng khách hàng ( KhachHang ) gồm các thuộc tính sau: mã số khách hàng (mskh), tên khách hàng (tenkh), địa chỉ (diachi), số điện thoại (sdt) và điểm tích lũy mua hàng (diem).
Chú giải cách tạo bảng và nhập nhập dữ liệu vào bảng:
+ Phải tạo các bảng không có khóa ngoại trước sau đó đến các bảng có khóa phụ rồi cuối cùng tạo các bảng phụ từ quan hệ nhiều nhiều.
+ Trong bảng danh mục đồ ăn ( DanhMucDoAn ) có thuộc tính hình ảnh, thuộc tính này không nên lưu dưới dạng kiểu dữ liệu image vì sẽ làm dung lượng của DB ngày càng lớn theo thời gian chỉ nên lưu path và file hình dưới dạng kiểu dữ liệu nchar hay nvarchar.
+ Nhập dữ liệu cũng tuân theo thứ tự tạo các bảng ở trên và chỉ nhập dữ lieu bên “Bán” không được nhập dữ liệu bên “Mua” vì dữ liệu này phải được nhập từ khách hàng.
+ Thứ tự nhập dữ liệu vào từng bảng:
Căn cứ vào phân tích, thiết kế thành phần CSDL từ mục 3.1 nêu trên, ta có Diagram của CSDL phục vụ cho hoạt động của WebApp bán đồ ăn thú cưng như Hình 3 -1
Hình 3-1 Diagram của Database hệ thống WebApp bán đồ ăn thú cưng trực tuyến
3.3.Thiết kế các Tables dữ liệu
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc msnv Mã số nhân viên Characters 20 Khóa chính mskv Mã số khách hàng Characters 20 Khóa phụ tennv Tên nhân viên Variable
Characters 100 ngaysinh Ngày sinh Date gioitinh Giới tính Variable
Characters 200 sdt Số điện thoại Characters 15 hinhanh Hình ảnh Variable
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc mskh Mã số khách hàng Characters 20 Khóa chính tenkh Tên khách hàng Variable
Characters 100 diachi Địa chỉ Variable
3.3.3 Thiết kế các Table NhaSanXuat
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc msnsx Mã nhà sản xuất Characters 20 Khóa chính tennsx Tên nhà sản xuất Variable
Characters 100 quocgia Quốc gia Variable
Characters 100 diachi Địa chỉ Variable
Characters 200 sdt Số điện thoại Characters 15 mota Mô tả Variable
3.3.4.Thiết kế các Table LoaiDoAn
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc
0 0 msloai Mã số loại đồ ăn Characters 20 Khóa chính tenloai Tên loại đồ ăn Variable
Characters 100 mota Mô tả Variable
3.3.5.Thiết kế các Table CuaHang
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc msch Mã số cửa hàng Characters 20 Khóa chính mskv Mã số khu vực Characters 20 Khóa phụ tench Tên cửa hàng Variable
Characters 100 diachi Địa chỉ Variable
Characters 200 sdt Số điện thoại Integer succhua Sức chứa Integer controng Còn trống Integer
3.3.6.Thiết kế các Table KhuVuc
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc mskv Mã số khu vực Characters 20 Khóa chính tenkv Tên khu vực Variable
Characters 100 msloai Mã số loại Characters 20 Khóa phụ msnsx Mã số nhà sản xuất Characters 20 Khóa phụ tenda Tên đồ ăn Variable
0 0 giaban Giá bán Interger dvt Đơn vị tính Interger ngaysanxuat Ngày sản xuất Date hansudung Hạn sử dụng Date khoiluong Khối lượng Variable
Characters 100 thanhphan Thành phần Variable
Characters 500 hinhanh Hình ảnh đồ ăn thú cưng Characters 100 mota Mô tả Variable
3.3.8.Thiết kế các Table DonDatHang
Thiết kế các Tables dữ liệu
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc msnv Mã số nhân viên Characters 20 Khóa chính mskv Mã số khách hàng Characters 20 Khóa phụ tennv Tên nhân viên Variable
Characters 100 ngaysinh Ngày sinh Date gioitinh Giới tính Variable
Characters 200 sdt Số điện thoại Characters 15 hinhanh Hình ảnh Variable
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc mskh Mã số khách hàng Characters 20 Khóa chính tenkh Tên khách hàng Variable
Characters 100 diachi Địa chỉ Variable
3.3.3 Thiết kế các Table NhaSanXuat
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc msnsx Mã nhà sản xuất Characters 20 Khóa chính tennsx Tên nhà sản xuất Variable
Characters 100 quocgia Quốc gia Variable
Characters 100 diachi Địa chỉ Variable
Characters 200 sdt Số điện thoại Characters 15 mota Mô tả Variable
3.3.4.Thiết kế các Table LoaiDoAn
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc
0 0 msloai Mã số loại đồ ăn Characters 20 Khóa chính tenloai Tên loại đồ ăn Variable
Characters 100 mota Mô tả Variable
3.3.5.Thiết kế các Table CuaHang
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc msch Mã số cửa hàng Characters 20 Khóa chính mskv Mã số khu vực Characters 20 Khóa phụ tench Tên cửa hàng Variable
Characters 100 diachi Địa chỉ Variable
Characters 200 sdt Số điện thoại Integer succhua Sức chứa Integer controng Còn trống Integer
3.3.6.Thiết kế các Table KhuVuc
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc mskv Mã số khu vực Characters 20 Khóa chính tenkv Tên khu vực Variable
Characters 100 msloai Mã số loại Characters 20 Khóa phụ msnsx Mã số nhà sản xuất Characters 20 Khóa phụ tenda Tên đồ ăn Variable
0 0 giaban Giá bán Interger dvt Đơn vị tính Interger ngaysanxuat Ngày sản xuất Date hansudung Hạn sử dụng Date khoiluong Khối lượng Variable
Characters 100 thanhphan Thành phần Variable
Characters 500 hinhanh Hình ảnh đồ ăn thú cưng Characters 100 mota Mô tả Variable
3.3.8.Thiết kế các Table DonDatHang
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc msddh Mã số đơn đặt hàng Characters 20 Khóa chính msnv Mã số nhân viên Characters 20 Khóa phụ mskh Mã số khách hàng Characters 20 Khóa phụ mskv Mã số khu vực Characters 20 Khóa phụ nguoinhan Người nhận Variable
Characters 100 diachigiao Địa chỉ giao Variable
Characters 200 sdtnguoinhan Số điện thoại người nhận
Characters 15 thoihan Thời hạn Datetime tinhtrang Tình trạng đơn đặt hàng
Characters 50 ghichu Ghi chú Variable
3.3.9.Thiết kế các Table CTDDH
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc msddh Mã số đơn đặt hàng Characters 20 Khóa chính, khóa phụ msda Mã số đồ ăn Variable
Characters 20 Khóa chính, khóa phụ soluong Số lượng Integer
3.3.10 Thiết kế các Table TonCuaHang
Tên thuộc tính Diễn giải Kiểu dữ liệu Chiều dài Ràng buộc
0 0 msch Mã số cửa hàng Characters 20 Khóa chính, khóa phụ msda Mã số đồ ăn Characters 20 Khóa chính, khóa phụ soluongton Số lượng tồn Integer
Cập nhật dữ liệu DB thực nghiệm cho WebApp bán đồ ăn thú cưng online
Dữ liệu cho Table NhanVien
Hình 3-2 Dữ liệu cho Table NhanVien
Dữ liệu cho Table NhaSanXuat
Hình 3-3 Dữ liệu cho Table NhaSanXuat
Dữ liệu cho Table LoaiDoAn
Hình 3-4 Dữ liệu cho Table LoaiDoAn
Dữ liệu cho Table CuaHang
Hình 3-5 Dữ liệu cho Table CuaHang
Dữ liệu cho Table KhuVuc
Hình 3-6 Dữ liệu cho Table KhuVuc
Dữ liệu cho Table DanhMucDoAn
Hình 3-7 Dữ liệu cho Table DanhMucDoAn
Dữ liệu cho Table TonCuaHang
Hình 3-8 Dữ liệu cho Table TonCuaHang
Giới thiệu một số SP và Trigger trong DB quản lý bán đồ ăn thú cưng online
Stored Procedures P_NhapTonKho: (Tăng số lượng tồn khi thêm dữ liệu vào bảng tồn kho nếu trùng dữ liệu)
(@MSCH NCHAR( 20 ), @MSDA NCHAR( 20 ), @SLT INTEGER)
ALTER TABLE TonCuaHang DROP CONSTRAINT PK_TonCuaHang
IF EXISTS( SELECT * FROM TonCuaHang WHERE msch @MSCH = AND msda = @MSDA )
UPDATE TonCuaHang SET soluongton soluongton = + @SLT WHERE msch @MSCH = AND msda = @MSDA END
INSERT INTO TonCuaHang (msch, msda , soluongton) VALUES ( @MSCH @MSDA , ,
END ALTER TABLE TonCuaHang ADD CONSTRAINT PK_TonCuaHang PRIMARY KEY (msch, msda)
Stored Procedures P_NhapCTDDH: (Tăng số lượng đặt khi thêm dữ liệu vào bảng chi tiết đơn đặt hàng nếu trùng dữ liệu)
( @MSDDH NCHAR ( 20), @MSDA NCHAR ( 20), @SLD INTEGER)
ALTER TABLE CTDDH DROP CONSTRAINT PK_CTDDH
IF EXISTS( SELECT * FROM CTDDH WHERE msddh = @MSDDH AND msda @MSDA = )
WHERE msddh @MSDDH AND msda @MSDA END
INSERT INTO CTDDH( msddh msda soluong) , , VALUES ( @MSDDH @MSDA @SLD , , ) END
ALTER TABLE CTDDH ADD CONSTRAINT PK_CTDDH PRIMARY KEY ( msddh msda , )
THIẾT KẾ VÀ LẬP TRÌNH WEBAPP PHẦN GIAO DỊCH 38 4.1 Giới thiệu về WebApp bán đồ ăn thú cưng online
MasterPage giao dịch : MasterPage.Master
4.2.1 Thiết kế Masterpage giao dịch
THIẾT KẾ MASTERPAGE (Design View)
Hình 4-9 Thiết kế MasterPage Giao dịch dùng chung cho cả phần quản lý
Trong thiết kế MasterPage như Hình 4 -9 bao gồm:
+ Thiết kế Table có 1 cột và nhiều dòng tạo thuận lợi cho việc kết cấu vị trí các thành phần thiết kế trên các WebPage thừa kế MasterPage này.
+ Banner giới thiệu về đơn vị kinh doanh độ ăn cho thú cưng trực tuyến.
+ Menu ngang (Horizontalization) cho phép khách hàng truy xuất các trang thông tin liên quan đến hệ thống Websites.
4.2.2 Lập trình (Codes) Masterpage giao dịch
MÃ LỆNH LẬP TRÌNH CỦA MASTERPAGE (Code View) public partial class MasterPage : System.Web.UI.MasterPage
{ protected void Page_Load( object sender, EventArgs e)
} protected void mainMenu_MenuItemClick( object sender, MenuEventArgs e)
{ if (e.Item.Value == "ql" || e.Item.Value == "dn" )
LoginNV.Visible = true ; //M công c LoginNV lên đ NSD (NV) th c hi n đăng ở ụ ể ự ệ nh p => th c hi n các năng qu n lý h th ng, nh hàng hóa, ậ ự ệ ả ệ ố ư
} protected void LoginnNV_Authenticate( object sender, AuthenticateEventArgs e)
//N u NSD đăng nh p v i tên Admin và m t kh u Admin@vn Ho c ế ậ ớ ậ ẩ ặ if ((LoginNV.UserName == "Admin" && LoginNV.Password == "admin@vn" ) ||
(LoginNV.UserName == "Guest" && LoginNV.Password == "guest@vn"))
{ e.Authenticated = true ; //Đăng nh p thành công, t đ ng chuy n đ n trang ậ ự ộ ể ế t L i NV D ti ti P URL đã á (t ứ là t Q ả lý M t)
0 0 trong LoginNV.DestinationPageURL đã gán(t c là trang Qu n lý Management) ứ ả
Session[ "dn" ] = LoginNV.UserName; //G I username sang trang qu n lý Ử ả
} else // Đăng nh p ko thành công ậ
Trang chủ trưng bày các loại đồ ăn cho thú cưng: HomePage.aspx
* Hệ Websites hỗ trợ chức năng giao dịch đồ ăn thú cưng trực tuyến thừa kế MasterPage nên trên, gồm các thành phần như sau:
THIẾT KẾ TRANG CHỦ HomePage (Design View)
Hình 4-10 Thiết kế trang chủ HomePage
Trong thiết kế trang chủ HomePage như Hình 4 -10 bao gồm:
+ Thiết kế Table có 1 cột và nhiều dòng tạo thuận lợi cho việc kết cấu vị trí các thành phần thiết kế trên HomePage.
+ Dùng DataList (DataListDMDA) để trưng bày các loại đồ ăn dành cho thú cưng với các thông tin mã đồ ăn thú cưng, tên đồ ăn thú cưng, giá bán và hình ảnh cho phép khách hàng xem thông tin của từng loại đồ ăn thú cừng và chọn mua trực tuyến.
+ Dùng Label (lblKetQua) để mỗi khi người sử dụng (Khách hàng) chọn đồ ăn thú cưng vào
“giỏ hàng” thì sẽ hiện lện tổng số lượng đồ ăn đã chọn và tổng tiền trong “giỏ hàng”.
+ Dùng Button (btnXemGioHang) để hỗ trợ người sử dụng (Khách hàng) kiểm tra trong
“giỏ hàng” có đủ các loại đồ ăn thú cưng đã “chọn vào giỏ hàng” hay chưa
4.3.2 Lập trình (Codes) WebApp giao dịch đồ ăn thú cưng online:
MÃ LỆNH LẬP TRÌNH CỦA HOMEPAGE (Code View)
B1: Khai báo đường dẫn thư viện NameSpace: using System.Data;
B2: Khai báo biến toàn cục cart thuộc kiểu DataTable để lưu giữa “giỏ hàng”:
- 39 - static DataTable cart = new DataTable();
B3: Khởi tạo “giỏ hàng” trong Page_Load(): if (!IsPostBack)
{ if (Session[ "cart" ] != null ) //Đã có gi hàng ỏ
//cart = (DataTable)Session["cart"]; cart = Session[ "cart" ] as DataTable;
} else //CH A "Gi hàng" => kh i t o "gi hàng" m i Ư ỏ ở ạ ỏ ớ
{ cart.Rows.Clear(); cart.Columns.Clear();
//Đ NH CÁC C T D LI U C N QU N LÝ TRONG "GI HÀNG" Ị Ộ Ữ Ệ Ầ Ả Ỏ cart.Columns.Add( "msda" , typeof(string)); cart.Columns.Add( "tenda" , typeof string ( )); cart.Columns.Add( "giaban" , typeof int ( )); cart.Columns.Add( "dvt" , typeof(string)); cart.Columns.Add( "soluong" , typeof(int)); cart.Columns.Add( "thanhtien" , typeof int ( ), "soluong * giaban");
Bước 4: Tạo sự kiện ItemCommand cho DataListDMDA: if (e.CommandName == "chon" ) //NSD (KH) b m nút "Ch n mua" ấ ọ
{ string msda = DataListDMDA.DataKeys[e.Item.ItemIndex].ToString().Trim(); string tenda = ((Label)e.Item.FindControl( "tendaLabel")).Text; int giaban = int.Parse(((Label)e.Item.FindControl( "giabanLabel" )).Text.Trim()); string dvt = ((Label)e.Item.FindControl( "dvtLabel")).Text; int soluong = int.Parse(((TextBox)e.Item.FindControl( "txtSL" )).Text.Trim()); foreach (DataRow r in cart.Rows)
{ r[ "soluong" ] = ( int)r["soluong" ] + soluong; goto kt;
Session[ "cart" ] = cart; lblResult.Text = "Hi n t i trong GI HÀNG đang có: " ệ ạ Ỏ + cart.Compute("Count(msda)", "").ToString() +
" s n ph m T ng s ti n = " ả ẩ ổ ố ề + cart.Compute("Sum(thanhtien)",
Trang “Giỏ hàng” của khách hàng chọn mua đồ ăn thú cưng: GioHang.aspx
4.4.1 Thiết kế (Design) WebPage “Giỏ hàng”
* Webpage “giỏ hàng” của hệ thống bán đồ ăn thú cưng trực tuyến thừa kế Masterpage nên trên, gồm các thành phần như sau:
THIẾT KẾ GioHang (Design View)
Hình 4-11 Thiết kế trang “giỏ hàng – GioHang”
Trong thiết kế GioHang như Hình 4-3 bao gồm:
+ Thiết kế Table có 1 cột và nhiều dòng tạo thuận lợi cho việc kết cấu vị trí các thành phần thiết kế trên GioHang (GioHang.aspx).
+ Dùng các Button như btnShop, btnDat (Đặt hàng), btnQuayVe (Về trang homepage) và btnHuy (Hủy giỏ hàng) để giúp khách hàng có thể sử dụng các chức năng trên GioHang (GioHangt.aspx).
+ Dùng các Lable như lblTieuDe dùng để thông báo cho khách biết “giỏ hàng” trống nếu khách hàng chưa chọn đồ ăn hay lblTong dùng dể thông tổng tiền trong “giỏ hàng”.
+ Sử dụng GridViewData (GridViewGioHang) để hiển thị các loại đồ ăn thú cưng mà khách hàng đã chọn trước đó.
4.4.2 Mã lệnh (Codes) WebPage “Giỏ hàng”
B2: Khai báo biến toàn cục cart thuộc kiểu DataTable để lưu giữa “giỏ hàng”: static DataTable cart = new DataTable();
B3: Kiểm tra “giỏ hàng” có được khởi tạo chưa trong Page_load(): if (Session[ "cart" ] == null) //Gi hàng "r ng" ỏ ổ
{ lblTieuDe.Text = "GI HÀNG C A QUÝ V HI N ĐANG TR NG, XIN M I SANG TRANG Ỏ Ủ Ị Ệ Ố Ờ
CH CH N Đ ĂN CHO THÚ C NG:" Ủ Ọ Ồ Ư ; btnDiMua.Text = "Ch n mua" ọ ; //KH ch n vào đây v trang ch mua DA ọ ề ủ
GridViewGioHang.DataSource = null ; //Xóa tr ng danh m c DA trong gi ố ụ ỏ lblTong.Text = "" ; //Xóa tr ng ph n tính ti n ố ầ ề btnDat.Visible = false ; //vì gi hàng R NG => KHÔNG có gì đ Đ t mua ỏ Ổ ể ặ btnHuy.Visible = false ; //vì gi hàng R NG => KHÔNG có gì đ H y gi ỏ Ổ ể ủ ỏ
} else //Gi hàng đã có ỏ
{ lblTieuDe.Text = "GI HÀNG HI N T I C A QUÝ KHÁCH NH SAU:" Ỏ Ệ Ạ Ủ Ư ; btnDiMua.Text = "Ch n mua ti p" ọ ế ; //vì đã có hàng trong gi => có th v ỏ ể ề Homepage đ mua ti p ể ế
//B1: L Y GI HÀNG T Session XU NG Ấ Ỏ Ừ Ố cart = Session[ "cart" ] as DataTable;
//B2: GÁN GI HÀNG VÀO GridViewDA : QUANG TR NG NH T Ỏ Ọ Ấ
//B4: TÍNH TOÁN: S L Ố ƯỢ NG MÓN + T NG TI N Ổ Ề lblTong.Text = "GI HÀNG HI N CÓ: " Ỏ Ệ + cart.Compute("Count(msda)",
" Đ ĂN CHO THÚ C NG T NG TI N = " Ồ Ư Ổ Ề + cart.Compute("Sum(thanhtien)",
"").ToString() + " Đ NG." Ồ ; btnDat.Visible = true ; //gi hàng đã có => KH có th Đ t mua ỏ ể ặ btnHuy.Visible = true ; //gi hàng đã có => KH có th H y gi ỏ ể ủ ỏ
} //else if "gi hàng" Session ỏ
B4: Tạo sự kiện cho các Button: protected void btnDiMua_Click(object sender, EventArgs e)
} protected void btnQuayVe_Click( object sender, EventArgs e)
} protected void btnHuy_Click( object sender, EventArgs e)
Session[ "cart" ] = null ; btnDiMua_Click(sender, e);
} protected void btnDat_Click( object sender, EventArgs e)
Đơn đặt hàng đồ ăn thú cưng: FrDatHang.aspx
+ Trang đặt hàng FrDatHang.aspx được gọi từ trang giỏ hàng GioHang.aspx không rỗng, tức là đã có hàng trong “Giỏ hàng”.
+ Chức năng khách hàng + Chức năng đơn đặt hàng + Chức năng chi tiết đơn hàng + Xử lý lưu trữ
* Trang này (FrDatHang.aspx) được gọi từ trang “Giỏ hàng” [GioHang.aspx] không rỗng:
0 0 protected void Page_Load( object sender, EventArgs e)
{ if (Session["cart"] == null ) //Gi hàng "r ng" ỏ ỗ
… btnDat.Visible = false ; // N u gi hàng r ng thì KHÔNG đ t hàng đ ế ỏ ổ ặ ượ c
} else//Gi hàng đã có ỏ
… btnDat.Visible = true;// N u gi hàng có đ ăn thú c ng nên đ t hàng đ ế ỏ ồ ư ặ ượ c
* Nếu giỏ hàng đã có thì có thể gọi được trang đặt hàng: FrDatHang.aspx
//Đ T HÀNG Ặ protected void btnDat_Click( object sender, EventArgs e)
* Để thực hiện được trang đặt hàng: FrDatHang.aspx thì cần phải “chạy” từ trang chủ (HomePage.aspx: trưng bày đồ ăn thú cưng), cho phép người dùng (Khách hàng) chọn hàng
“chọn mua” và đã có “giỏ hàng” : Set As Start Page từ HomePage.aspx
* ĐẶT HÀNG PHẢI XÁC ĐỊNH 3 NỘI DUNG:
+ Khách hàng nào đặt mua hàng: Mã khách hàng, họ tên khách hàng, địa chỉ, số điện thoại từ bảng bảng khách hàng, nếu chưa tồn tại khách hàng đó thì thực hiện thêm mới.
+ Thông tin đơn hàng: Mã đơn đặt hàng, thời gian lập, người nhận, khu vực, địa chỉ giao, số điện thoại, ghi chú, thời hạn.
+ Đơn này đặt mua những mặt hàng nào: Mã đơn đặt hàng, mã đồ ăn và số lượng mua.
4.5.2 Thiết kế trang Đặt hàng: FrDatHang.aspx
Thiết kế FORM “Đặt hàng” có 3 phần:
* Thông tin khách hàng: Tìm theo mã khách hàng, họ tên, địa chỉ và số điện thoại, nếu không tồn tại khách hàng đó thì thực hiện thêm mới khách hàng.
* Thông tin đơn đặt hàng: Mã đơn đặt hàng, thời gian lập, người nhận, khu vực, địa chỉ giao, số điện thoại, ghi chú, thời hạn.
* Thông tin “giỏ hàng”: lấy từ Trang “giỏ hàng” sang, để khách hàng xem và kiểm tra các đồ ăn đã đặt, tổng tiền phải thanh toán: không thêm / xóa / sửa (việc này thực hiện trên trang
Vì vậy, trang “Đặt hàng” chỉ thực hiện việc kiểm tra khách hàng đặt hàng, tạo khách hàng mới, tạo đơn đặt hàng, chi tiết đơn đặt hàng.
PHẦN THÔNG TIN KHÁC HÀNG: Tìm khách hàng, nếu chưa có thì thêm mới, nếu đã có thì chọn KH (vì có thể tìm thấy nhiều KH), được thiết kế như Hình 4 -12
Hình 4-12 Thiết kế phần thông tin KH của Đơn hàng
+ Nếu tìm có khách hàng thì phần thông tin khách hàng mới sẽ bị ẩn: Visible = false
+ Ghi chú: Khi GridViewKH rỗng (không có dòng nào) nó sẽ tự ẩn.
+ Bổ sung Nút “ Chọn ” trên mỗi dòng của GridViewKH
PHẦN THÔNG TIN ĐƠN HÀNG
+ Thông tin đơn hàng được thiết kế theo Table DonDatHang đã có trong DB:
DonDatHang (msddh, msnv, mskv, mskh, ngaylap, thoihan, nguoinhan, diachigiao, sdt, ghichu)
+ Thông tin đơn hàng chỉ hiển thi khi đã có thông tin khách hàng, tức là trong phần thông tin khách hàng đã “Chọn khách hàng”, vì vậy, ban đầu, các đối tượng thiết kế trong phần thông tin Đơn hàng sẽ có Visible = false.
+ Mã khách hàng lấy từ txtMaKH đã thống nhất từ đó chọn 1 khách hàng ở trên.
+ Mã nhân viên sẽ để trống khi khác hàng đặt hàng, chỉ có khi trưởng bộ phận giao hàng phân công nhân viên giao hàng thì mới có thông tin nên thuộc tính msnv trong DB phải Allow null.
+ Mã khu vực: do khách hàng chọn khu vực giao hàng.
+ Tình trang mặc định sẽ gán bằng chưa giao, chỉ do nhân viên giao hàng thay đổi.
+ Các nội dung thiết kế cơ bản là Lable, TextBox và Calendar, như Hình 4 -13.
+ Khi khách hàng đồng ý đơn hàng thì lblThongBao sẽ gán giá trị “QÚY KHÁCH ĐÃ ĐẶT HÀNG THÀNH CÔNG !” để báo cho khách hàng đã đặt hàng thành công
HÀNG THÀNH CÔNG !” để báo cho khách hàng đã đặt hàng thành công.
+ Nút “Về trang homepage” giúp khác hàng chuyển về trang “HomePage”.
Hình 4-13 Thiết kế phần thông tin Đơn hàng trên trang Đặt hàng
PHẦN THÔNG TIN CÁC MẶT HÀNG ĐẶT MUA CỦA ĐƠN HÀNG (GIỎ HÀNG) + GridViewGioHang dùng để hiện thị thông tin các đồ ăn thú cưng của đơn hàng.
+ lblTong dùng để thông báo cho khách hàng biết số lượng đồ ăn thú cưng đang đặt là bao nhiêu và tổng số tiền phải thanh toán.
Hình 4-14 Thiết kế phần thông tin Đơn hàng trên trang Đặt hàng
4.5.3 Lập trình mã lệnh (Codes) của trang Đặt hàng:
PHẦN THÔNG TIN KHÁC HÀNG
* Tìm khách hàng, nếu chưa có thì thêm mới, nếu đã có thì chọn khách hàng; vì có thể tìm thấy nhiều khách hàng:
+ Lệnh SQL tìm khách hàng
SELECT mskh, tenkh, diachi, sdt, diem FROM KhachHang
WHERE (mskh = @mskh) OR (tenkh = @tenkh) OR (diachi = @diachi) OR (sdt = @sdt) Với tham số như Hình 4 -15
- Khi thực hiện các thao tác “Thêm”, “Xóa” và “Sửa” nhân viên cần quan tâm các vấn đề:
+ Không sửa “mã loại đồ ăn” và “mã nhà sản xuất”.
+ Chuyển nhóm (chuyển loại đồ ăn, nhà sản xuất từ loại đồ ăn, nhà sản xuất này sang loại đồ ăn, nhà sản xuất khác)
+ Vì DB lưu đường dẫn đến file hình ảnh nên cần sử dụng chức năng riêng để “cập nhật hình ảnh”.
+ Không sửa “mã đồ ăn” (vì là khóa chính) và chú ý một vấn đề tương tự “Thêm”.
+ Khi xóa sẽ liên quan đến RBTV dữ liệu.
+ “mã loại đồ ăn” và “mã nhà sản xuất” không nhập mà sẽ là “mã loại đồ ăn” và “mã nhà sản xuất” đã chọn trong DropDownListLDA và DropDownListNSX Vì vậy khi chọn “tất cả” trong DropDownListLDA và DropDownListNSX thì khi đó ẩn nút “Thêm” (không cho thêm mới trong trường hợp này; cần có ToolTip để nhắc người sử dụng chọn “mã loại đồ ăn” và “mã nhà sản xuất” cụ thể trước khi thêm).
+ Hình ảnh: chọn từ trong PC (không nhập vì là path lưu trong DB) do vậy ta sẽ dùng FileUpload. + “mã đồ ăn” là khóa chính, ko nên cho tự nhập (hệ thống tự tăng lên theo qui luật nào đó). Tuy nhiên trong đồ án này ta sẽ cho người sử dụng tự nhập, phải xử lý trùng khóa.
+ Cách thực hiện thủ tục thêm, có 2 phương án:
_Phương án 1: Khi người sử dụng bấm nút “Thêm” thì sẽ thêm 1 dòng trống mới trong Gridview để NSD nhập thông tin áo mới; có 3 phương án: dòng đầu trong gridview, dòng cuối, tại vị trí đang chọn: thường là dòng cuối khi nhập: phải chuyển các Field này thành TemplateField
_Phương án 2: Trong đồ án này ta sẽ dùng các TextBox, DropDownList, Calendar, Button để nhập thông tin đồ ăn thú cưng mới:
Chỉ khi người sử dụng bấm “Thêm” thì các TextBox, DropDownList, Calendar, Button hiện ra cho người sử dụng nhập thông tin đồ ăn mới mới, đổi nhãn nút “Thêm” thành “Lưu”.
Người sử dụng sau khi nhập xong thông tin đồ ăn mới mới, sẽ bấm nút “Lưu” Lưu thông tin đồ ăn mới vào DB đồng thời ẩn các TextBox, DropDownList, Calendar, Button và đổi nhãn nút “Lưu” thành “Thêm”.
+ Khi Paging thì thao tác thêm sẽ bị ảnh hưởng.
5.4.4.1 Thêm thông tin đồ ăn thú cưng:
Bước 2: Viết lệnh SQL thêm thông tin đồ ăn thú cưng trrong SqlDataSourceDMDA tương ứng:
INSERT INTO DanhMucDoAn(msda, msloai, msnsx, tenda, giaban, dvt, ngaysanxuat, hansudung, khoiluong, thanhphan, hinhanh, mota) VALUES (@msda, @msloai, @msnsx,
@tenda, @giaban, @dvt, @ngaysanxuat, @hansudung, @khoiluong, @thanhphan,
Hình 5-29 Thiết lập tham số thêm DMDA
Bước 3: Thiết kế các TextBox, DropDownList, Calendar, Button cho phép người sử dụng thêm thông tin đồ ăn thú cưng.
Hình 5-30 Thiết kế các nút thêm DMDA
Bước 4: Không cho phép “Thêm” khi người sử dụng chọn “Tất cả” trong DropDownListLoaiDA và DropDownListNSX; Vì khi thêm mới, được hiểu là thêm mới vào “loại đồ ăn” và “nhà sản xuất” đã chọn trong DropDownListLoaiDA và
Bước 5: Viết mã lệnh (Codes) cho nút lênh “Thêm”: protected void btnThem_Click(object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSDA.Visible = !lblMSDA.Visible; lblTDA.Visible = !lblTDA.Visible; lblGia.Visible = !lblGia.Visible; lblDVT.Visible = !lblDVT.Visible; lblKL.Visible = !lblKL.Visible; lblTP.Visible = !lblTP.Visible; lblMT.Visible = !lblMT.Visible; lblHinh.Visible = !lblHinh.Visible; lblNSX.Visible = !lblNSX.Visible; lblHSD.Visible = !lblHSD.Visible; txtMSDA.Visible = !txtMSDA.Visible; txtTDA.Visible = !txtTDA.Visible;
- 83 - txtGia.Visible = !txtGia.Visible; txtDVT.Visible = !txtDVT.Visible; txtKL.Visible = !txtKL.Visible;
DropDownListKL.Visible = !DropDownListKL.Visible; txtTP.Visible = !txtTP.Visible; txtMT.Visible = !txtMT.Visible;
FileUploadHinh.Visible = !FileUploadHinh.Visible; txtNSX.Visible = !txtNSX.Visible; btnNSX.Visible = !btnNSX.Visible; txtHSD.Visible = !txtHSD.Visible; btnHSD.Visible = !btnHSD.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSDA.Text = "DA" ; txtTDA.Text = "" ; txtGia.ToolTip = "Giá ph i > 0" ả ; txtGia.Text = "" ; txtDVT.Text = "" ; txtKL.ToolTip = "Kh i l ố ượ ng ph i > 0" ả ; txtKL.Text = "" ; txtTP.Text = "" ; txtMT.Text = "" ; txtNSX.Text = DateTime.Now.ToShortDateString(); txtHSD.Text = DateTime.Now.ToShortDateString(); btnThem.Text = "L u" ư ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceDMDA.InsertParameters.Add( "msda" , txtMSDA.Text.Trim()); SqlDataSourceDMDA.InsertParameters.Add( "msloai" ,
SqlDataSourceDMDA.InsertParameters.Add( "tenda" , txtTDA.Text.Trim()); SqlDataSourceDMDA.InsertParameters.Add( "giaban" ,
System.Data.DbType.Int32, txtGia.Text.Trim());
SqlDataSourceDMDA.InsertParameters.Add( "dvt" , txtDVT.Text.Trim()); SqlDataSourceDMDA.InsertParameters.Add( "khoiluong" , (txtKL.Text.Trim() + DropDownListKL.SelectedValue));
SqlDataSourceDMDA.InsertParameters.Add( "thanhphan" , txtTP.Text.Trim()); SqlDataSourceDMDA.InsertParameters.Add( "ngaysanxuat" ,
System.Data.DbType.DateTime, txtNSX.Text);
System.Data.DbType.DateTime, txtHSD.Text);
SqlDataSourceDMDA.InsertParameters.Add( "mota" , txtMT.Text.Trim());
FileUploadHinh.SaveAs(MapPath( "~\\Media\\Images\\" +
FileUploadHinh.FileName)); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM Đ ĂN = " Ỗ Ồ + ex.Message; Response.Write(ex.Message); } btnThem.Text = "Thêm" ;
Bước 6: Viết mã lệnh (Codes) cho nút lênh “Hủy”: protected void btnHuy_Click(object sender, EventArgs e)
{ lblMSDA.Visible = false ; lblTDA.Visible = false ; lblGia.Visible = false ; lblDVT.Visible = false ;
THIẾT KẾ VÀ LẬP TRÌNH WEBAPP PHẦN QUẢN LÝ 60 5.1 Giới thiệu về WebApp quản lý hệ thống bán đồ ăn thú cưng trực tuyến
Trang quản lý nhân viên: FrQL_NV.aspx
5.5.1.Phân tích trang Quản lý nhân viên: FrQL_NV.aspx
+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý nhân viên từ trang quản lý chung.
+ Liên quan 2 Tables sau: NhanVien, KhuVuc.
+ Chủ yếu: thực hiện các chức năng: thêm / sửa / xóa thông tin nhân viên trong Table NhanVien.
+ Chuỗi kết nối DB: 1G308NVQHDoAnThuCungOnlineConnectionString
5.5.2.Thiết kế (Design) trang quản lý nhân viên: FrQl_NV.aspx
Hình 5-35 Thiết kế trang quản lý “nhân viênc”
[1] DropDownListKV: Chọn “mã khu vực”
Field for the Value : mskv
Câu lệnh kết nối DB: SELECT * FROM [KhuVuc]
[2] GridViewNV: Liệt kê các nhân viên thuộc khu vực (dùng Where)
Có mệnh đề WHERE (mskv = @mskv)
Hình 5-36 Thiết lập tham số hiển thị nhân viên
Câu lệnh SQL kết nối DataBase:
SELECT * FROM [NhanVien] WHERE ([mskv] = @mskv) Với @ mskv = DropDownListKV SelectedValue
Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)
[Gridview: Task] -> Edit Column // Selected Fields
DataField : cột dữ liệu (trong DB) được dùng
HeaderText sẽ tùy chỉnh theo tên của thuộc tính tương ứng
ReadOnly = true cho “mã nhân viên”
Hình 5-37 Thiết lập tham số trong GridViewNV
[5] Đối với thuộc tính của field “hình ảnh”
Convert this field to a TemplateField (góc dưới phải của Properties của Field)
Đối với các Field là Template (Field tự thiết kế, không dùng mặc định): PHẢI THIẾT
[Gridview: Task] -> Edit Template (chỉ làm khi ít nhất có 1 field Template trong Gridview)
Chú ý: + Có thể có nhiều cột TemplateFields: phải chọn từng cột để thiết kế
+ Một cột có thể phải thiết kế nhiều trạng thái: ItemTeplate (mặc định),…
Field “hinhanh”: Xóa Label rồi thêm control Image [Task] -> Edit DataBinding -> ImageUrl = Eval("hinhanh")
Hình 5-38 Thiết lập field “hình ảnh”
CheckBoxHinh: Cho người sử dụng chọn có / không hiển thị hình ảnh của nhân viên trong GridViewNV (Mặc định “không” vì tải hình ảnh sẽ làm chậm trang web):
+ Trạng thái ban đầu GridviewNV: cột “Hình mẫu” Ẩn
Hình 5-39 Thiết lập field “hình ảnh” bị ẩn
+ CheckBoxHinh.Text = Hiển thị hình ảnh (Checked = False, Autopostback = true)
// n | hi n hình m u trong gidview (ban đ u: n -> tránh web b ch m do t i nh) Ẩ ệ ẫ ầ ẩ ị ậ ả ả protected void CheckBoxHinh_CheckedChanged( object sender, EventArgs e)
GridViewNV.Columns[7].Visible = !GridViewDMDA.Columns[7].Visible; // đi u ch nh ề ỉ s c t t ố ộ ươ ng ng v i hình ứ ớ
Bổ sung mục chọn “Tất cả” trong DropDownListKV và hiển thị “mã khu vực” kế bên:
Bước 1: Bổ sung Item mới cho DropdownlistKV [Task] -> Edit Item: Add [Text = Tất cả, Value = *].
Bước 2: Properties [Dropdownlist] AppendDataBoundItems = True: các mục chọn trong DDL sẽ bao gồm các mục Edit Items ở bước 1 ghép (Append) với các mục chọn có trong DB được kết vào DDL này (Khu vực)
Bước 3: Viết bổ sung câu lệnh trong thủ tục sự kiện SelectedIndexChanged của DropDownListKV: protected void DropDownListKV_SelectedIndexChanged(object sender, EventArgs e) {
//Ch n xem t t c ọ ấ ả if (DropDownListKV.SelectedValue.Trim() == "*" ) // N u ch n t t c ế ọ ấ ả
SqlDataSourceNV.SelectCommand = "SELECT * FROM [NhanVien]" ; // vi t l i ế ạ select không where btnThem.Enabled = false ; // N u ch n nhóm là t t c thì không th đ ăn m i ế ọ ấ ả ể ồ ớ đ ượ c do không bi t kà nhóm đ ăn nào ế ồ btnThem.ToolTip = DropDownListKV.ToolTip = "B N PH I CH N M T NHÓM Đ ĂN Ạ Ả Ọ Ộ Ồ CHO THÚ C NG M I THÊM Đ ĂN M I Đ Ư Ớ Ồ Ớ ƯỢ C !" ;
{ btnThem.Enabled = true ; // Đã ch n nhóm đ ăn c th đ ọ ồ ụ ể ượ c thêm
0 0 btnThem.ToolTip = DropDownListKV.ToolTip = "" ; // Không nh c n a ắ ữ
// Hi n th mã th ể ị ươ ng hi u ệ lblMSKV.Text = DropDownListKV.SelectedValue;
Ngoài ra, copy codes trên bổ sung vào Page_Load(…) để khi WebPage vừa được tải lên đúng lúc trong DropDownList là “Tất cả|” (vì nó là mục đầu tiên) thì GridView bên đưới sẽ liệt kê tả cả các đồ ăn thú cưng: static string us = "Vô Danh" ; protected void Page_Load( object sender, EventArgs e)
{ if (Session[ "dn" ] != null ) us = Session[ "dn" ] as string ; // L y tên đăng nh p ấ ậ thành công t Session (đ ừ ượ c g i t login c a Masterpage) ử ừ ủ lblTieuDe.Text = "CHÀO M NG " Ừ + us + " - Đ N V I TRANG QU N LÝ NHÂN VIÊN C A Ế Ớ Ả Ủ
Checkbox cho hiển thị / không hiển thị Hình ảnh của nhân viên trong GridView
Bước 1: Chuyển đổi cột “Hình ảnh” GridView sang chế độ Tự thiết kế: Template Field [GridView]Task -> Edit Columns: “hinhanh” -> Chọn “Convert to Template Field”
Bước 2: Thiết kế lại cột hình ảnh trong GridView: [GridView]Task -> Edite Templates
Hinh 5-2 Thiết kế lại cột "Hình ảnh" trên GridView
Thay thế LabelHinhAnh bởi Image (lấy từ Toolbox): Image.Task->Edit DataBinding: ImageURL = Hinh (trong DB)
Bước 3: Codes thay đổi lựa chọn của CheckBox (.Auto Postback = True)
// n | hi n hình m u trong gidview (ban đ u: n -> tránh web b ch m do t i nh) Ẩ ệ ẫ ầ ẩ ị ậ ả ả protected void CheckBoxHinh_CheckedChanged( object sender, EventArgs e)
GridViewNV.Columns[7].Visible = !GridViewNV.Columns[7].Visible; // đi u ch nh s ề ỉ ố c t t ộ ươ ng ng v i hình ứ ớ
- PostBack = True khi chỉ cần 1 lựa chọn (DropDownList || CheckBox) là thực hiện tải lại DB
- PostBack = False khi chỉ cần Nhiều lựa chọn (DropDownList, CheckBox, ) thì mới tải lại DB
- Paging: Phân trang cho GridView
5.5.3.Lập trình (Codes) trang quản lý nhân viên: FrQL_NV.aspx public partial class FrQL_NV : System.Web.UI.Page
{ static string us = "Vô Danh" ; protected void Page_Load( object sender, EventArgs e)
{ if (Session[ "dn" ] != null ) us = Session[ "dn" ] as string ; // L y tên đăng nh p ấ ậ thành công t Session (đ ừ ượ c g i t login c a Masterpage) ử ừ ủ lblTieuDe.Text = "CHÀO M NG " Ừ + us + " - Đ N V I TRANG QU N LÝ NHÂN VIÊN C A Ế Ớ Ả Ủ
} protected void DropDownListKV_SelectedIndexChanged( object sender, EventArgs e) {
//Ch n xem t t c ọ ấ ả if (DropDownListKV.SelectedValue.Trim() == "*" ) // N u ch n t t c ế ọ ấ ả
SqlDataSourceNV.SelectCommand = "SELECT * FROM [NhanVien]" ; // vi t l i ế ạ select không where
0 0 btnThem.Enabled = false ; // N u ch n nhóm là t t c thì không th đ ăn m i ế ọ ấ ả ể ồ ớ đ ượ c do không bi t kà nhóm đ ăn nào ế ồ btnThem.ToolTip = DropDownListKV.ToolTip = "B N PH I CH N M T NHÓM Đ ĂN Ạ Ả Ọ Ộ Ồ CHO THÚ C NG M I THÊM Đ ĂN M I Đ Ư Ớ Ồ Ớ ƯỢ C !" ;
{ btnThem.Enabled = true ; // Đã ch n nhóm đ ăn c th đ ọ ồ ụ ể ượ c thêm btnThem.ToolTip = DropDownListKV.ToolTip = "" ; // Không nh c n a ắ ữ
// Hi n th mã th ể ị ươ ng hi u ệ lblMSKV.Text = DropDownListKV.SelectedValue;
} protected void btnThem_Click( object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSNV.Visible = !lblMSNV.Visible; lblTNV.Visible = !lblTNV.Visible; lblGT.Visible = !lblGT.Visible; lblSDT.Visible = !lblSDT.Visible; lblDC.Visible = !lblDC.Visible; lblNS.Visible = !lblNS.Visible; lblHinh.Visible = !lblHinh.Visible; txtMSNV.Visible = !txtMSNV.Visible; txtTNV.Visible = !txtTNV.Visible;
DropDownListGT.Visible = !DropDownListGT.Visible; txtSDT.Visible = !txtSDT.Visible; txtDC.Visible = !txtDC.Visible; txtNS.Visible = !txtNS.Visible; btnNS.Visible = !btnNS.Visible;
FileUploadHinh.Visible = !FileUploadHinh.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSNV.Text = "" ; txtTNV.Text = "" ;
- 97 - txtSDT.Text = "" ; txtDC.Text = "" ; txtNS.Text = DateTime.Now.ToShortDateString(); btnThem.Text = "L u" ư ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceNV.InsertParameters.Add( "msnv" , txtMSNV.Text.Trim()); SqlDataSourceNV.InsertParameters.Add( "tennv" , txtTNV.Text.Trim()); SqlDataSourceNV.InsertParameters.Add( "ngaysinh" ,
System.Data.DbType.DateTime, txtNS.Text);
SqlDataSourceNV.InsertParameters.Add( "diachi" , txtDC.Text.Trim()); SqlDataSourceNV.InsertParameters.Add( "sdt" , txtSDT.Text.Trim()); SqlDataSourceNV.InsertParameters.Add( "hinhanh" ,
FileUploadHinh.SaveAs(MapPath( "~\\Media\\Images\\" +
FileUploadHinh.FileName)); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM NHÂN VIÊN = " Ỗ + ex.Message; Response.Write(ex.Message); } btnThem.Text = "Thêm" ;
} protected void btnHuy_Click( object sender, EventArgs e)
{ lblMSNV.Visible = false ; lblTNV.Visible = false ; lblGT.Visible = false ; lblSDT.Visible = false ; lblDC.Visible = false ; lblNS.Visible = false ; lblHinh.Visible = false ; txtMSNV.Visible = false ; txtTNV.Visible = false ;
DropDownListGT.Visible = false ; txtSDT.Visible = false ; txtDC.Visible = false ; txtNS.Visible = false ; btnNS.Visible = false ;
FileUploadHinh.Visible = false ; btnHuy.Visible = false ; btnThem.Text = "Thêm" ;
} protected void btnNS_Click( object sender, EventArgs e)
CalendarNS.Visible = true ; btnNS.Text = "H y" ủ ;
CalendarNS.Visible = false ; btnNS.Text = "Ch n" ọ ;
} protected void CalendarNS_SelectionChanged( object sender, EventArgs e)
{ txtNS.Text = CalendarNS.SelectedDate.ToShortDateString();
CalendarNS.Visible = false ; btnNS.Text = "Ch n" ọ ;
} protected void btnQuayVe_Click( object sender, EventArgs e)
} protected void CheckBoxHinh_CheckedChanged( object sender, EventArgs e)
GridViewNV.Columns[7].Visible = !GridViewNV.Columns[7].Visible;
} static int pos = 0; protected void GridViewNV_RowEditing( object sender, GridViewEditEventArgs e)
} protected void GridViewNV_RowCommand( object sender, GridViewCommandEventArgs e) { if (e.CommandName == "chon" ) // b m nút ch n trên dòng đang ch n hình t ấ ọ ọ ừ fileUpload
((FileUpload)GridViewNV.Rows[pos].FindControl("FileUploadHinh")).FileName.Trim(); // Gi ữ FileName c a hình mà nhân viên v a ch n ủ ừ ọ if (p != "" ) //NSD (NV) đã ch n file hình, tránh b m t file hình cũ khi NSD ọ ị ấ ko ch n hình m i ọ ớ
((TextBox)GridViewNV.Rows[pos].FindControl( "txtHinh" )).Text =
"~\\\\Media\\\\Images\\\\" + System.IO.Path.GetFileName(p.Trim());
((FileUpload)GridViewNV.Rows[pos].FindControl( "FileUploadHinh" )).SaveAs(MapPath( "~\\Media\\I mages\\" + p));
((FileUpload)GridViewNV.Rows[pos].FindControl( "FileUploadHinh" )).Visible = false; // n FileUpload Ẩ
((Button)GridViewNV.Rows[pos].FindControl( "btnThem" )).Text = "Ch n hình ọ khác";
5.5.4.Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý nhân viên:
B1: Thiết kế nút lệnh [Thêm | Xóa | Sửa | Chọn] trên các dòng của Gridview
5.5.4.1 Thêm thông tin nhân viên:
Bước 2: Viết lệnh SQL thêm thông tin nhân viên trrong SqlDataSourceNV tương ứng
INSERT INTO NhanVien(msnv, mskv, tennv, ngaysinh, gioitinh, diachi, sdt, hinhanh)
VALUES (@msnv, @mskv, @tennv, @ngaysinh, @gioitinh, @diachi, @sdt, @hinhanh)
Hình 5-40 Thiết lập tham số thêm nhân viên
Bước 3: Thiết kế các TextBox, DropDownList, Calendar, Button cho phép người sử dụng thêm thông tin nhân viên.
Hình 5-41 Thiết kế các nút thêm mới nhân viên
Bước 4: Không cho phép “Thêm” nhân viên mới khi người sử dụng chọn “Tất cả” trong DropDownListKV Vì khi thêm mới, được hiểu là thêm mới vào “khu vực” đã chọn trong DropDownListKV.
Bước 5: Viết mã lệnh (Codes) cho nút lênh “Thêm” nhân viên mới: protected void btnThem_Click( object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSNV.Visible = !lblMSNV.Visible; lblTNV.Visible = !lblTNV.Visible; lblGT.Visible = !lblGT.Visible; lblSDT.Visible = !lblSDT.Visible; lblDC.Visible = !lblDC.Visible; lblNS.Visible = !lblNS.Visible; lblHinh.Visible = !lblHinh.Visible; txtMSNV.Visible = !txtMSNV.Visible; txtTNV.Visible = !txtTNV.Visible;
DropDownListGT.Visible = !DropDownListGT.Visible; txtSDT.Visible = !txtSDT.Visible; txtDC.Visible = !txtDC.Visible; txtNS.Visible = !txtNS.Visible; btnNS.Visible = !btnNS.Visible;
FileUploadHinh.Visible = !FileUploadHinh.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ
0 0 txtMSNV.Text = "" ; txtTNV.Text = "" ; txtSDT.Text = "" ; txtDC.Text = "" ; txtNS.Text = DateTime.Now.ToShortDateString(); btnThem.Text = "L u" ư ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceNV.InsertParameters.Add( "msnv" , txtMSNV.Text.Trim()); SqlDataSourceNV.InsertParameters.Add( "tennv" , txtTNV.Text.Trim()); SqlDataSourceNV.InsertParameters.Add( "ngaysinh" ,
System.Data.DbType.DateTime, txtNS.Text);
SqlDataSourceNV.InsertParameters.Add( "diachi" , txtDC.Text.Trim()); SqlDataSourceNV.InsertParameters.Add( "sdt" , txtSDT.Text.Trim()); SqlDataSourceNV.InsertParameters.Add( "hinhanh" ,
FileUploadHinh.SaveAs(MapPath( "~\\Media\\Images\\" +
FileUploadHinh.FileName)); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM NHÂN VIÊN = " Ỗ + ex.Message; Response.Write(ex.Message); } btnThem.Text = "Thêm" ;
Bước 6: Viết mã lệnh (Codes) cho nút lênh “Hủy”: protected void btnHuy_Click(object sender, EventArgs e)
{ lblMSNV.Visible = false ; lblTNV.Visible = false ; lblGT.Visible = false ; lblSDT.Visible = false ; lblDC.Visible = false ; lblNS.Visible = false ; lblHinh.Visible = false ; txtMSNV.Visible = false ; txtTNV.Visible = false ;
DropDownListGT.Visible = false ; txtSDT.Visible = false ; txtDC.Visible = false ; txtNS.Visible = false ; btnNS.Visible = false ;
FileUploadHinh.Visible = false ; btnHuy.Visible = false ; btnThem.Text = "Thêm" ;
5.5.4.2 Sửa thông tin nhân viên:
Bước 2: Viết lệnh SQL Sửa (Update) thông tin nhân viên trong SqlDataSourceNV tương ứng:
UPDATE NhanVien SET tennv = @tennv, ngaysinh = @ngaysinh, gioitinh = @gioitinh, diachi = @diachi, sdt = @sdt, hinhanh = @hinhanh WHERE (msnv = @msnv)
Hình 5-42 Thiết lập tham số sửa thông tin nhân viên
5.5.4.3 Xóa thông tin nhân viên:
B2: Viết lệnh SQL Xóa (Delete) nhân viên trong SqlDataSourceNV tương ứng :
DELETE FROM NhanVien WHERE (msnv = @msnv)
Hình 5-43 Thiết lập tham số xóa thông tin nhân viên
5.5.5.Lập trình (Codes) xử lý RBTV dữ liệu khi xóa nhân viên:
Khi xóa nhân viên (Table NhanVien) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với 2 bảng: DonDatHang (Đơn đặt hàng) và CTDDH (Chi tiết đơn đặt hàng).
Hình 5-44 Trích DB liên quan xử lý RBTV dữ liệu khi xóa nhân viên
Có 2 trường hợp xử lý RBTV dữ liệu:
+ Nhân viên cần xóa vẫn còn đơn hàng chưa giải quyết: xử lý “hủy đơn hàng” bằng cách xóa đơn hàng mà nhân viên ấy.
+ Nhân viên xóa đơn hàng cần phải xóa chi tiết trong đơn hàng (CTDDH): xử lý “hủy chi tiết đơn” bằng cách xóa từng CTDDH hoăc xóa tất cả CTDDH của đơn hàng mà nhân viên ấy lập.
5.5.5.2 Thiết kế 2 GridView phụ ngay trên Form quản lý FrQL_NV.aspx
* Thiết kế 2 GridView phụ “đơn đặt hàng” và “chi tiết đơn đặt hàng”:
Hình 5-45 Các GridvView xử lý RBTV dữ liệu khi xóa nhân viên
Caption = CÁC HÓA ĐƠN ĐẶT HÀNG ĐƯỢC LẬP BỞI NHÂN VIÊN ĐANG CHỌN
Caption = CHI TIẾT CÁC ĐỒ ĂN CHO THÚ CƯNG TRONG ĐƠN ĐẶT HÀNG ĐANG CHỌN
* Câu lệnh Select trong GridViewDDH và GridViewCTDDH:
SELECT * FROM [DonDatHang] WHERE ([msnv] = @msnv)
SELECT * FROM [CTDDH] WHERE ([msddh] = @msddh)
5.5.5.3 Xử lý các RBTV trên 2 GridView phụ “đơn đặt hàng” và “chi tiết đơn đặt hàng”
- Hủy đơn[Delete]: Chính là câu lệnh xóa (Delete) được viết trong SqlDataSourceDDH:
DELETE FROM DonDatHang WHERE (msddh = @msddh)
- Bàn giao đơn hàng[Update]: Chính là câu lệnh cập nhật (Update) được viết trong
UPDATE DonDatHang SET msnv = @msnv, ghichu = @ghichu WHERE (msddh @msddh)
- Huỷ chi tiết đơn[Delete]: Chính là câu lệnh xoá (delete) được viết trong SqlDataSourceCTDDH:
DELETE FROM CTDDH WHERE (msddh = @msddh) AND (msda = @msda)
Với msddh = GridViewCTDDH.SelectedValue[1] msda = GridViewCTDDH.SelectedValue[2]
Trang quản lý cửa hàng: FrQL_CH.aspx
5.6.1.Phân tích trang Quản lý cửa hàng: FrQL_CH.aspx
+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý cửa hàng từ trang quản lý chung.
+ Liên quan 2 Tables sau: CuaHang, KhuVuc.
+ Chủ yếu: thực hiện các chức năng: thêm / sửa / xóa thông tin cửa hàng trong Table CuaHang.
+ Chuỗi kết nối DB: 1G308NVQHDoAnThuCungOnlineConnectionString
5.6.2.Thiết kế (Design) trang quản lý cửa hàng: FrQl_CH.aspx
Hình 5-46 Thiết kế trang quản lý “cửa hàng”
[1] DropDownListKV: Chọn “mã khu vực”
Field for the Value : mskv
Câu lệnh kết nối DB: SELECT * FROM [KhuVuc]
[2] GridViewCH: Liệt kê các cửa hàng thuộc khu vực (dùng Where)
Có mệnh đề WHERE (mskv = @mskv)
Hình 5-47 Thiết lập tham số hiển thị thông tin cửa hàng
Câu lệnh SQL kết nối DataBase:
SELECT * FROM [CuaHang] WHERE ([mskv] = @mskv)
Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)
[Gridview: Task] -> Edit Column // Selected Fields
DataField : cột dữ liệu (trong DB) được dùng
HeaderText sẽ tùy chỉnh theo tên của thuộc tính tương ứng
ReadOnly = true cho “mã cửa hàng”
Hình 5-48 Thiết lập trong GridViewCH
5.6.3.Lập trình (Codes) trang quản lý cửa hàng: FrQL_CH.aspx public partial class FrQL_CH : System.Web.UI.Page
{ static string us = "Vô Danh" ; protected void Page_Load( object sender, EventArgs e)
{ if (Session[ "dn" ] != null ) us = Session[ "dn" ] as string ; // L y tên đăng nh p ấ ậ thành công t Session (đ ừ ượ c g i t login c a Masterpage) ử ừ ủ lblTieuDe.Text = "CHÀO M NG " Ừ + us + " - Đ N V I TRANG QU N LÝ C A HÀNG BÁN Ế Ớ Ả Ử Đ ĂN THÚ C NG C A TI M G3.08 NVQH -" Ồ Ư Ủ Ệ ;
} protected void DropDownListKV_SelectedIndexChanged( object sender, EventArgs e) {
//Ch n xem t t c ọ ấ ả if (DropDownListKV.SelectedValue.Trim() == "*" ) // N u ch n t t c ế ọ ấ ả
SqlDataSourceCH.SelectCommand = "SELECT * FROM [CuaHang]" ; // vi t l i ế ạ select không where btnThem.Enabled = false ; // N u ch n nhóm là t t c thì không th đ ăn m i ế ọ ấ ả ể ồ ớ đ ượ c do không bi t kà nhóm đ ăn nào ế ồ
- 111 - btnThem.ToolTip = DropDownListKV.ToolTip = "B N PH I CH N M T NHÓM Đ ĂN Ạ Ả Ọ Ộ Ồ CHO THÚ C NG M I THÊM Đ ĂN M I Đ Ư Ớ Ồ Ớ ƯỢ C !" ;
{ btnThem.Enabled = true ; // Đã ch n nhóm đ ăn c th đ ọ ồ ụ ể ượ c thêm btnThem.ToolTip = DropDownListKV.ToolTip = "" ; // Không nh c n a ắ ữ
// Hi n th mã th ể ị ươ ng hi u ệ lblKV.Text = DropDownListKV.SelectedValue;
} protected void btnThem_Click( object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSCH.Visible = !lblMSCH.Visible; lblTCH.Visible = !lblTCH.Visible; lblDC.Visible = !lblDC.Visible; lblSDT.Visible = !lblSDT.Visible; lblSC.Visible = !lblSC.Visible; lblCT.Visible = !lblCT.Visible; txtMSCH.Visible = !txtMSCH.Visible; txtTCH.Visible = !txtTCH.Visible; txtDC.Visible = !txtDC.Visible; txtSDT.Visible = !txtSDT.Visible; txtSC.Visible = !txtSC.Visible; txtCT.Visible = !txtCT.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSCH.Text = "" ; txtTCH.Text = "" ; txtDC.Text = "" ; txtSDT.Text = "" ; txtSC.ToolTip = "S c ch a > 0" ứ ứ ; txtSC.Text = "" ; txtCT.ToolTip = "Cò tr ng > 0" ố ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceCH.InsertParameters.Add( "msch" , txtMSCH.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "tench" , txtTCH.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "diachi" , txtDC.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "sdt" , txtSDT.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "succhua" ,
System.Data.DbType.Int32, txtSC.Text.Trim());
System.Data.DbType.Int32, txtCT.Text.Trim());
SqlDataSourceCH.Insert(); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM C A HÀNG = " Ỗ Ử + ex.Message;} btnThem.Text = "Thêm" ;
} protected void btnHuy_Click( object sender, EventArgs e)
{ lblMSCH.Visible = false ; lblTCH.Visible = false ; lblDC.Visible = false ;
- 113 - lblSDT.Visible = false ; lblSC.Visible = false ; lblCT.Visible = false ; txtMSCH.Visible = false ; txtTCH.Visible = false ; txtDC.Visible = false ; txtSDT.Visible = false ; txtSC.Visible = false ; txtCT.Visible = false ; btnHuy.Visible = false ; btnThem.Text = "Thêm" ;
} protected void btnQuayVe_Click( object sender, EventArgs e)
5.6.4.Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý cửa hàng:
B1: Thiết kế nút lệnh [Thêm | Xóa | Sửa | Chọn] trên các dòng của Gridview
5.6.4.1 Thêm thông tin cửa hàng:
Bước 2: Viết lệnh SQL thêm thông tin cửa hàng trrong SqlDataSourceCH tương ứng:
INSERT INTO CuaHang(msch, mskv, tench, diachi, sdt, succhua, controng) VALUES
(@msch, @mskv, @tench, @diachi, @sdt, @succhua, @controng)
Hình 5-49 Thiết lập tham số thêm mới cửa hàng
Bước 3: Thiết kế các TextBox, Button cho phép người sử dụng thêm thông tin cửa hàng.
Hình 5-50 Thiết kế các nút thêm mới cửa hàng
Bước 4: Không cho phép “Thêm” cửa hàng mới khi người sử dụng chọn “Tất cả” trong
DropDownListKV Vì khi thêm mới, được hiểu là thêm mới vào “khu vực” đã chọn trong DropDownListKV.
Bước 5: Viết mã lệnh (Codes) cho nút lênh “Thêm” nhân viên mới: protected void btnThem_Click( object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSCH.Visible = !lblMSCH.Visible; lblTCH.Visible = !lblTCH.Visible; lblDC.Visible = !lblDC.Visible; lblSDT.Visible = !lblSDT.Visible; lblSC.Visible = !lblSC.Visible; lblCT.Visible = !lblCT.Visible; txtMSCH.Visible = !txtMSCH.Visible; txtTCH.Visible = !txtTCH.Visible;
- 115 - txtDC.Visible = !txtDC.Visible; txtSDT.Visible = !txtSDT.Visible; txtSC.Visible = !txtSC.Visible; txtCT.Visible = !txtCT.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSCH.Text = "" ; txtTCH.Text = "" ; txtDC.Text = "" ; txtSDT.Text = "" ; txtSC.ToolTip = "S c ch a > 0" ứ ứ ; txtSC.Text = "" ; txtCT.ToolTip = "Cò tr ng > 0" ố ; txtCT.Text = "" ; btnThem.Text = "L u" ư ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceCH.InsertParameters.Add( "msch" , txtMSCH.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "tench" , txtTCH.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "diachi" , txtDC.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "sdt" , txtSDT.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "succhua" ,
System.Data.DbType.Int32, txtSC.Text.Trim());
System.Data.DbType.Int32, txtCT.Text.Trim());
SqlDataSourceCH.Insert(); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM C A HÀNG = " Ỗ Ử + ex.Message;} btnThem.Text = "Thêm" ;
Bước 6: Viết mã lệnh (Codes) cho nút lênh “Hủy”: protected void btnHuy_Click( object sender, EventArgs e)
{ lblMSCH.Visible = false ; lblTCH.Visible = false ; lblDC.Visible = false ; lblSDT.Visible = false ; lblSC.Visible = false ; lblCT.Visible = false ; txtMSCH.Visible = false ; txtTCH.Visible = false ; txtDC.Visible = false ; txtSDT.Visible = false ; txtSC.Visible = false ; txtCT.Visible = false ; btnHuy.Visible = false ; btnThem.Text = "Thêm" ;
5.6.4.2 Sửa thông tin cửa hàng:
Bước 2: Viết lệnh SQL Sửa (Update) thông tin cửa hàng trong SqlDataSourceCH tương ứng:
UPDATE CuaHang SET tench = @tench, diachi = @diachi, sdt = @sdt, succhua @succhua, controng = @controng WHERE (msch = @msch)
Hình 5-51 Thiết lập tham số sửa thông tin cửa hàng
5.6.4.3 Xóa thông tin cửa hàng:
B2: Viết lệnh SQL Xóa (Delete) cửa hàng trong SqlDataSourceCH tương ứng : DELETE FROM CuaHang WHERE (msch = @msch)
Hình 5-52 Thiết lập xóa thông tin cửa hàng
5.6.5.Lập trình (Codes) xử lý RBTV dữ liệu khi xóa cửa hàng:
Khi xóa cửa hàng (Table CuaHang) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với 1 bảng: TonCuaHang (Tồn cửa hàng).
Hình 5-53 Trích DB liên quan xử lý RBTV dữ liệu khi xóa cửa hàng
Có 1 trường hợp xử lý RBTV dữ liệu:
+ Của hàng cần xóa vẫn còn tồn đồ ăn chưa giải quyết: xử lý “thanh lý” bằng cách xóa từng tồn cửa hàng hoặc xóa tất cả tồn cửa hàng của cửa hàng ấy.
5.6.5.2 Thiết kế 1 GridView phụ ngay trên Form quản lý FrQL_CH.aspx
* Thiết kế 1 GridView phụ “tồn cửa hàng”:
Hình 5-54 Các GridvView xử lý RBTV dữ liệu khi xóa nhân viên
Caption = TỒN CỬA HÀNG ĐANG CHỌN
* Câu lệnh Select trong GridViewTCH:
SELECT * FROM [TonCuaHang] WHERE ([msch] = @msch)
5.6.5.3 Xử lý các RBTV trên 1 GridView phụ “tồn cửa hàng”
- Thanh lý[Delete] : Chính là câu lệnh xóa (Delete) được viết trong SqlDataSourceTCH: DELETE FROM TonCuaHang WHERE (msch = @msch) AND (msda = @msda)
Với msddh = GridViewTCH.SelectedValue[1] msda = GridViewTCH.SelectedValue[2]
Trang quản lý xuất / nhập cửa hàng: FrQL_TCH.aspx
5.7.1.Phân tích trang Quản lý xuất / nhập cửa hàng: FrQL_TCH.aspx
+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý tồn cửa hàng từ trang quản lý chung.
+ Liên quan 3 Tables sau: TonCuaHang, CuaHang, DMDA.
+ Chủ yếu: thực hiện các chức năng: thêm / sửa / xóa thông tin tồn cửa hàng trong Table TonCuaHang.
+ Chuỗi kết nối DB: 1G308NVQHDoAnThuCungOnlineConnectionString
5.7.2.Thiết kế (Design) trang quản lý xuất / nhập cửa hàng: FrQl_TCH.aspx
Hình 5-55 Thiết kế trang quản lý “tồn cửa hàng”
[1] DropDownListCH: Chọn “mã cửa hàng”
Field for the Value : msch
Câu lệnh kết nối DB: SELECT * FROM [CuaHang]
[2] DropDownListDMDA: Chọn “mã đồ ăn”
Field for the Value : msda
Câu lệnh kết nối DB: SELECT * FROM [DMDA]
[3] GridViewTCH: Liệt kê các tồn cửa hàng thuộc cửa hàng và đồ ăn thú cưng (dùng Where)
Có mệnh đề WHERE (msch = @msch) AND (msda = @msda)
Hình 5-56 Thiết lập tjham số hiển thị thông tin tồn cửa hàng
Câu lệnh SQL kết nối DataBase:
SELECT * FROM [TonCuaHang] WHERE ([msch] = @msch) AND ([msda] @msda)
Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)
[Gridview: Task] -> Edit Column // Selected Fields
DataField : cột dữ liệu (trong DB) được dùng
HeaderText sẽ tùy chỉnh theo tên của thuộc tính tương ứng
ReadOnly = true cho “mã cửa hàng” và “mã đồ ăn”
Hình 5-57 Thiết lập trong GridViewTCH
5.7.3.Lập trình (Codes) trang quản lý xuất nhập cửa hàng: FrQL_TCH.aspx/ public partial class FrQL_TCH : System.Web.UI.Page
{ static string us = "Vô Danh" ;
- 123 - protected void Page_Load( object sender, EventArgs e)
{ if (Session[ "dn" ] != null ) us = Session[ "dn" ] as string ; // L y tên đăng nh p ấ ậ thành công t Session (đ ừ ượ c g i t login c a Masterpage) ử ừ ủ lblTieuDe.Text = "CHÀO M NG " Ừ + us + " - Đ N V I TRANG QU N LÝ XU T / NH P Ế Ớ Ả Ấ Ậ
C A HÀNG BÁN Đ ĂN THÚ C NG C A TI M G3.08 NVQH -" Ử Ồ Ư Ủ Ệ ;
} protected void DropDownListCH_SelectedIndexChanged( object sender, EventArgs e) { if (DropDownListCH.SelectedValue.Trim() == "*" &&
SqlDataSourceTCH.SelectCommand = "SELECT * FROM TonCuaHang" ; btnThem.Enabled = false ; btnThem.ToolTip = DropDownListCH.ToolTip = DropDownListMSDA.ToolTip = "B N Ạ
PH I CH N M T NHÓM Đ ĂN CHO THÚ C NG M I THÊM Đ ĂN M I Đ Ả Ọ Ộ Ồ Ư Ớ Ồ Ớ ƯỢ C !" ;
} else if (DropDownListCH.SelectedValue.Trim() == "*" &&
SqlDataSourceTCH.SelectCommand = "SELECT * FROM TonCuaHang WHERE (msda =
@msda)"; btnThem.Enabled = false ; btnThem.ToolTip = DropDownListCH.ToolTip = DropDownListMSDA.ToolTip = "B N Ạ
PH I CH N M T NHÓM Đ ĂN CHO THÚ C NG M I THÊM Đ ĂN M I Đ Ả Ọ Ộ Ồ Ư Ớ Ồ Ớ ƯỢ C !" ;
} else if (DropDownListCH.SelectedValue.Trim() != "*" &&
SqlDataSourceTCH.SelectCommand = "SELECT * FROM TonCuaHang WHERE (msch =
@msch)"; btnThem.Enabled = false ; btnThem.ToolTip = DropDownListCH.ToolTip = DropDownListMSDA.ToolTip = "B N Ạ
PH I CH N M T NHÓM Đ ĂN CHO THÚ C NG M I THÊM Đ ĂN M I Đ Ả Ọ Ộ Ồ Ư Ớ Ồ Ớ ƯỢ C !" ;
{ btnThem.Enabled = true ; btnThem.ToolTip = DropDownListCH.ToolTip = DropDownListMSDA.ToolTip = "" ; } lblMSCH.Text = DropDownListCH.SelectedValue; lblMSDA.Text = DropDownListMSDA.SelectedValue;
} protected void btnThem_Click( object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblSLT.Visible = !lblSLT.Visible; txtSLT.Visible = !txtSLT.Visible; rdo.Visible = !rdo.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtSLT.ToolTip = "S l ố ượ ng t n > 0" ồ ; txtSLT.Text = "" ; rdo.SelectedIndex = 0;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceTCH.InsertParameters.Add( "SLT" , System.Data.DbType.Int32, (rdo.SelectedValue.Trim() == "0" ? txtSLT.Text.Trim() : "-" + txtSLT.Text.Trim()));
SqlDataSourceTCH.Insert(); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM T N C A HÀNG = " Ỗ Ồ Ử + ex.Message;} btnThem.Text = "Thêm" ;
} protected void btnHuy_Click( object sender, EventArgs e)
{ lblSLT.Visible = false ; txtSLT.Visible = false ; rdo.Visible = false ; btnHuy.Visible = false ; btnThem.Text = "Thêm" ;
} protected void btnQuayVe_Click( object sender, EventArgs e)
5.7.4.Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý xuất / nhập cửa hàng:
B1: Thiết kế nút lệnh [Thêm | Xóa | Sửa | Chọn] trên các dòng của Gridview
5.7.4.1 Thêm thông tin xuất / nhập cửa hàng:
Bước 2: Viết lệnh SQL thêm thông tin tồn cửa hàng trrong SqlDataSourceTCH tương ứng:
Stored Procedure: P_NhapTonKho @msch, @msda, @soluong
Hình 5-58 Thiết lập tham số thêm mới tồn cửa hàng
Bước 3: Thiết kế các TextBox, Button cho phép người sử dụng thêm thông tin cửa hàng.
Hình 5-59 Thiết kế các nút thêm mới tồn cửa hàng
Bước 4: Không cho phép “Thêm” cửa hàng mới khi người sử dụng chọn “Tất cả” trong
DropDownListCH DropDownListDMDAvà Vì khi thêm mới, được hiểu là thêm mới vào “của hàng” và “đồ ăn thú cưng” đã chọn trong DropDownListCH và
Bước 5: Viết mã lệnh (Codes) cho nút lênh “Thêm”: protected void btnThem_Click(object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblSLT.Visible = !lblSLT.Visible; txtSLT.Visible = !txtSLT.Visible; rdo.Visible = !rdo.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtSLT.ToolTip = "S l ố ượ ng t n > 0" ồ ; txtSLT.Text = "" ; rdo.SelectedIndex = 0; btnThem.Text = "L u" ư ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceTCH.InsertParameters.Add( "SLT" , System.Data.DbType.Int32, (rdo.SelectedValue.Trim() == "0" ? txtSLT.Text.Trim() : "-" + txtSLT.Text.Trim()));
SqlDataSourceTCH.Insert(); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM T N C A HÀNG = " Ỗ Ồ Ử + ex.Message;} btnThem.Text = "Thêm" ;
Bước 6: Viết mã lệnh (Codes) cho nút lênh “Hủy”: protected void btnHuy_Click(object sender, EventArgs e)
{ lblSLT.Visible = false ; txtSLT.Visible = false ;
- 129 - btnHuy.Visible = false ; btnThem.Text = "Thêm" ;
5.7.4.2 Sửa thông tin xuất nhập cửa hàng:
Bước 2: Viết lệnh SQL Sửa (Update) thông tin tồn cửa hàng trong SqlDataSourceTCH tương ứng:
UPDATE TonCuaHang SET soluongton = @soluongton WHERE (msch = @msch) AND (msda = @msda)
Hình 5-60 Thiết lập tham số sửa thông tin tồn cửa hàng
5.7.4.3 Xóa thông tin xuất / nhập cửa hàng:
B2: Viết lệnh SQL Xóa (Delete) tồn cửa hàng trong SqlDataSourceTCH tương ứng : DELETE FROM TonCuaHang WHERE (msch = @msch) AND (msda = @msda)
Hình 5-61 Thiết lập tham số xóa thông tin tồn cửa hàng
Trang quản lý loại đồ ăn: FrQL_LDA.aspx
5.8.1.Phân tích trang Quản lý loại đồ ăn: FrQL_LDA.aspx
+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý loại đồ ăn từ trang quản lý chung.
+ Liên quan 2 Tables sau: LoaiDA.
+ Chủ yếu: thực hiện các chức năng: thêm / sửa / xóa thông tin loại đồ ăn trong Table LoaiDA.
+ Chuỗi kết nối DB: 1G308NVQHDoAnThuCungOnlineConnectionString
5.8.2.Thiết kế (Design) trang quản lý loại đồ ăn: FrQl_LDA.aspx
Hình 5-62 Thiết kế trang quản lý “loại đồ ăn”
[1] GridViewLDA: Liệt kê các loại đồ ăn dành cho thú cưng
Hình 5-63 Thiết lập tham số hiển thị thông tin loại đồ ăn
Câu lệnh SQL kết nối DataBase:
Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)
[Gridview: Task] -> Edit Column // Selected Fields
DataField : cột dữ liệu (trong DB) được dùng
HeaderText sẽ tùy chỉnh theo tên của thuộc tính tương ứng
ReadOnly = true cho “mã loại đồ ăn”
Hình 5-64 Thiết lập trong GroidViewLDA
5.8.3.Lập trình (Codes) trang quản lý loại đồ ăn: FrQL_LDA.aspx public partial class FrQL_LDA : System.Web.UI.Page
{ static string us = "Vô Danh" ; protected void Page_Load( object sender, EventArgs e)
{ if (Session[ "dn" ] != null ) us = Session[ "dn" ] as string ; // L y tên đăng nh p ấ ậ thành công t Session (đ ừ ượ c g i t login c a Masterpage) ử ừ ủ lblTieuDe.Text = "CHÀO M NG " Ừ + us + " - Đ N V I TRANG QU N LÝ LO I Đ ĂN Ế Ớ Ả Ạ Ồ THÚ C NG C A TI M G3.08 NVQH -" Ư Ủ Ệ ;
- 133 - protected void btnThem_Click( object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSL.Visible = !lblMSL.Visible; lblTL.Visible = !lblTL.Visible; lblMT.Visible = !lblMT.Visible; txtMSL.Visible = !txtMSL.Visible; txtTL.Visible = !txtTL.Visible; txtMT.Visible = !txtMT.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSL.Text = "" ; txtTL.Text = "" ; txtMT.Text = "" ; btnThem.Text = "L u" ư ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceLDA.InsertParameters.Add( "msloai" , txtMSL.Text.Trim()); SqlDataSourceLDA.InsertParameters.Add( "tenloai" , txtTL.Text.Trim()); SqlDataSourceLDA.InsertParameters.Add( "mota" , txtMT.Text.Trim());
SqlDataSourceLDA.Insert(); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM LO I Đ ĂN = " Ỗ Ạ Ồ + ex.Message; } btnThem.Text = "Thêm" ;
} protected void btnHuy_Click( object sender, EventArgs e)
{ lblMSL.Visible = false ; lblTL.Visible = false ; lblMT.Visible = false ; txtMSL.Visible = false ; txtTL.Visible = false ; txtMT.Visible = false ; btnHuy.Visible = false ; btnHuy.Text = "Thêm" ;
} protected void btnQuayVe_Click( object sender, EventArgs e)
5.8.4.Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý loại đồ ăn:
B1: Thiết kế nút lệnh [Thêm | Xóa | Sửa | Chọn] trên các dòng của Gridview
5.8.4.1 Thêm thông tin loại đồ ăn:
Bước 2: Viết lệnh SQL thêm thông tin loại đồ ăn trrong SqlDataSourceLDA tương ứng:
INSERT INTO LoaiDoAn(msloai, tenloai, mota) VALUES (@msloai, @tenloai,
Hình 5-65 Thiết lập tham số thêm mới loại đồ ăn
Bước 3: Thiết kế các TextBox, Button cho phép người sử dụng thêm thông tin loại đồ ăn.
Hình 5-66 Thiết kế các nút thêm, mới loại đồ ăn
Bước 4: Người sử dụng ấn nút “Thêm” để tiến hành nghiệp vụ thêm thông tin loại đồ ăn vào DB.
Bước 5: Viết mã lệnh (Codes) cho nút lênh “Thêm”: protected void btnThem_Click(object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSL.Visible = !lblMSL.Visible; lblTL.Visible = !lblTL.Visible; lblMT.Visible = !lblMT.Visible; txtMSL.Visible = !txtMSL.Visible; txtTL.Visible = !txtTL.Visible; txtMT.Visible = !txtMT.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư
0 0 if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSL.Text = "" ; txtTL.Text = "" ; txtMT.Text = "" ; btnThem.Text = "L u" ư ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceLDA.InsertParameters.Add( "msloai" , txtMSL.Text.Trim()); SqlDataSourceLDA.InsertParameters.Add( "tenloai" , txtTL.Text.Trim()); SqlDataSourceLDA.InsertParameters.Add( "mota" , txtMT.Text.Trim());
SqlDataSourceLDA.Insert(); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM LO I Đ ĂN = " Ỗ Ạ Ồ + ex.Message; } btnThem.Text = "Thêm" ;
Bước 6: Viết mã lệnh (Codes) cho nút lênh “Hủy”: protected void btnHuy_Click(object sender, EventArgs e)
{ lblMSL.Visible = false ; lblTL.Visible = false ; lblMT.Visible = false ; txtMSL.Visible = false ;
- 137 - txtTL.Visible = false ; txtMT.Visible = false ; btnHuy.Visible = false ; btnHuy.Text = "Thêm" ;
5.8.4.2 Sửa thông tin loại đồ ăn:
Bước 2: Viết lệnh SQL Sửa (Update) thông tin loại đồ ăn trong SqlDataSourceLDA tương ứng:
UPDATE LoaiDoAn SET tenloai = @tenloai, mota = @mota WHERE (msloai = @msloai)
Hình 5-67 Thiết lập tham số sủa thông tin loại đồ ăn
5.8.4.3 Xóa thông tin loại đồ ăn:
B2: Viết lệnh SQL Xóa (Delete) thông tin loại đồ ăn trong SqlDataSourceLDA tương ứng :
DELETE FROM LoaiDA WHERE (msloai = @msloai)
Hình 5-68 Thiết lập tham số xóa loại đồ ăn
5.8.5.Lập trình (Codes) xử lý RBTV dữ liệu khi xóa loại đồ ăn:
Khi xóa loại đồ ăn (Table LoaiDA) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với 3 bảng: DMDA (Danh mục đồ ăn), TonCuaHang (Tồn cửa hàng) và CTDDH (Chi tiết đơn đặt hàng).
Hình 5-69 Trích DB liên quan xử lý RBTV dữ liệu khi xóa loại đồ ăn
Có 3 trường hợp xử lý RBTV dữ liệu:
+ Để xóa được “loại đồ ăn” người sử dụng cần xử lý “xóa đồ ăn” bằng cách xóa các đồ ăn thú cưng thuộc loại đồ ăn muốn xóa, nhưng cần phải xóa các chi tiết đơn đặt hàng và tồn cửa hàng liên quan đến các đồ ăn muỗn xóa.
+ Để xóa được “tồn cửa hàng” người sử dụng cần xử lý “thanh lý” bằng cách xóa các tồn cửa hàng liên quan đến các đồ ăn thú cưng mà người sử dụng người sử dụng muốn xóa.
+ Để xóa được “chi tiết đơn đặt hàng” người sử dụng cần xử lý “hủy chi tiết đơn đặt hàng” bằng cách xóa từng CTDDH hoặc xóa tất cả CTDDH của đơn hàng mà người sử dụng muốn xóa
5.8.5.2 Thiết kế 3 GridView phụ ngay trên Form quản lý FrQL_LDA.aspx
* Thiết kế 3 GridView phụ “danh mục đồ ăn”, “tồn cửa hàng” và “chi tiết đơn đặt hàng”:
Hình 5-70 Các GridvView xử lý RBTV dữ liệu khi xóa loại đồ ăn
Caption = DANH MỤC LOẠI ĐỒ ĂN THÚ CƯNG ĐANG CHỌN
Caption = ĐỒ ĂN THÚ CƯNG ĐANG CHỌN CÒN TỒN TRONG CÁC CỬA HÀNG VỚI
Caption = ĐỒ ĂN THÚ CƯNG ĐANG CHỌN CÒN ĐẶT MUA TRÊN CÁC ĐƠN HÀNG SAU
* Câu lệnh Select trong GridViewDMDA, GridViewTCH và GridViewCTDDH:
SELECT * FROM [DMDA] WHERE ([msloai] = @loai)
SELECT * FROM [TonCuaHang] WHERE ([msda] = @msda)
SELECT * FROM [CTDDH] WHERE ([msda] = @msda)
5.8.5.3 Xử lý các RBTV trên 3 GridView phụ “danh mục đồ ăn”, “đơn đặt hàng” và
“chi tiết đơn đặt hàng”
- Xóa đồ ăn[Delete]: Chính là câu lệnh xóa (Delete) được viết trong SqlDataSourceDMDA:
DELETE FROM DMDA WHERE (msda = @msda)
- Thanh lý[Delete] : Chính là câu lệnh xóa (Delete) được viết trong SqlDataSourceTCH: DELETE FROM TonCuaHang WHERE (msch = @msch) AND (msda = @msda)
Với msch = GridViewTCH.SelectedValue[1] msda = GridViewTCH.SelectedValue[2]
- Huỷ chi tiết đơn[ hàng[Delete]: Chính là câu lệnh xoá (delete) được viết trong SqlDataSourceCTDDH:
DELETE FROM CTDDH WHERE (msddh = @msddh) AND (msda = @msda)
Với msddh = GridViewCTDDH.SelectedValue[1] msda = GridViewCTDDH.SelectedValue[2]
Trang quản lý nhà sản xuất: FrQL_NSX.aspx
5.9.1.Phân tích trang Quản lý nhà sản xuất: FrQL_NSX.aspx
+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý nhà sản xuất từ trang quản lý chung.
+ Liên quan 2 Tables sau: NhaSanXuat.
+ Chủ yếu: thực hiện các chức năng: thêm / sửa / xóa thông tin nhà sản xuất trong Table NhaSanXuat.
+ Chuỗi kết nối DB: 1G308NVQHDoAnThuCungOnlineConnectionString
5.9.2.Thiết kế (Design) trang quản lý nhà sản xuất: FrQl_NSX.aspx
Hình 5-71 Thiết kế trang quản lý “nhà sản xuất”
[1] GridViewNSX: Liệt kê các nhà sản xuất cung cấp đồ ăn thú cưng
Hình 5-72 Thiết lập tham số hiển thị thông tin nhà sản xuất
Câu lệnh SQL kết nối DataBase:
Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)
[Gridview: Task] -> Edit Column // Selected Fields
DataField : cột dữ liệu (trong DB) được dùng
HeaderText sẽ tùy chỉnh theo tên của thuộc tính tương ứng
ReadOnly = true cho “mã nhà sản xuất”
Hình 5-73 Thiết lập trong GridViewNSX
5.9.3.Lập trình (Codes) trang quản lý nhà sản xuất: FrQL_NSX.aspx public partial class FrQL_NSX : System.Web.UI.Page
{ static string us = "Vô Danh" ; protected void Page_Load( object sender, EventArgs e)
{ if (Session[ "dn" ] != null ) us = Session[ "dn" ] as string ; // L y tên đăng nh p ấ ậ thành công t Session (đ ừ ượ c g i t login c a Masterpage) ử ừ ủ lblTieuDe.Text = "CHÀO M NG " Ừ + us + " - Đ N V I TRANG QU N LÝ NHÀ S N XU T Ế Ớ Ả Ả Ấ Đ ĂN THÚ C NG C A TI M G3.08 NVQH -" Ồ Ư Ủ Ệ ;
} protected void btnThem_Click( object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSNSX.Visible = !lblMSNSX.Visible; lblTNSX.Visible = !lblTNSX.Visible; lblQG.Visible = !lblQG.Visible; lblDC.Visible = !lblDC.Visible; lblSDT.Visible = !lblSDT.Visible; lblMT.Visible = !lblMT.Visible; txtMSNSX.Visible = !txtMSNSX.Visible;
0 0 txtTNSX.Visible = !txtTNSX.Visible; txtQG.Visible = !txtQG.Visible; txtDC.Visible = !txtDC.Visible; txtSDT.Visible = !txtSDT.Visible; txtMT.Visible = !txtMT.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSNSX.Text = "" ; txtTNSX.Text = "" ; txtQG.Text = "" ; txtDC.Text = "" ; txtSDT.Text = "" ; txtMT.Text = "" ; btnThem.Text = "L u" ư ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceNSX.InsertParameters.Add( "msnsx" , txtMSNSX.Text.Trim()); SqlDataSourceNSX.InsertParameters.Add( "tennsx" , txtTNSX.Text.Trim()); SqlDataSourceNSX.InsertParameters.Add( "quocgia" , txtQG.Text.Trim()); SqlDataSourceNSX.InsertParameters.Add( "diachi" , txtDC.Text.Trim()); SqlDataSourceNSX.InsertParameters.Add( "sdt" , txtSDT.Text.Trim()); SqlDataSourceNSX.InsertParameters.Add( "mota" , txtMT.Text.Trim());
SqlDataSourceNSX.Insert(); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM NHÀ S N XU T = " Ỗ Ả Ấ + ex.Message; } btnThem.Text = "Thêm" ;
} protected void btnHuy_Click( object sender, EventArgs e)
{ lblMSNSX.Visible = false ; lblTNSX.Visible = false ; lblQG.Visible = false ; lblDC.Visible = false ; lblSDT.Visible = false ; lblMT.Visible = false ; txtMSNSX.Visible = false ; txtTNSX.Visible = false ; txtQG.Visible = false ; txtDC.Visible = false ; txtSDT.Visible = false ; txtMT.Visible = false ; btnHuy.Visible = false ; btnThem.Text = "Thêm" ;
} protected void btnQuayVe_Click( object sender, EventArgs e)
5.9.4.Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý nhà sản xuất:
B1: Thiết kế nút lệnh [Thêm | Xóa | Sửa | Chọn] trên các dòng của Gridview
5.9.4.1 Thêm thông tin nhà sản xuất:
Bước 2: Viết lệnh SQL thêm thông tin nhà sản xuất trrong SqlDataSourceNSX tương ứng:
INSERT INTO NhaSanXuat(msnsx, tennsx, quocgia, sdt, mota) VALUES (@msnsx,
Hình 5-74 Thiết lập tham số thêm mới nhà sản xuất
Bước 3: Thiết kế các TextBox, Button cho phép người sử dụng thêm thông tin nhà sản xuất.
Hình 5-75 Thiết kế các nút thêm mới nhà sản xuất
Bước 4: Người sử dụng ấn nút “Thêm” để tiến hành nghiệp vụ thêm thông tin nhà sản xuất vào DB.
Bước 5: Viết mã lệnh (Codes) cho nút lênh “Thêm”: protected void btnThem_Click(object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSNSX.Visible = !lblMSNSX.Visible; lblTNSX.Visible = !lblTNSX.Visible; lblQG.Visible = !lblQG.Visible; lblDC.Visible = !lblDC.Visible; lblSDT.Visible = !lblSDT.Visible;
- 147 - lblMT.Visible = !lblMT.Visible; txtMSNSX.Visible = !txtMSNSX.Visible; txtTNSX.Visible = !txtTNSX.Visible; txtQG.Visible = !txtQG.Visible; txtDC.Visible = !txtDC.Visible; txtSDT.Visible = !txtSDT.Visible; txtMT.Visible = !txtMT.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSNSX.Text = "" ; txtTNSX.Text = "" ; txtQG.Text = "" ; txtDC.Text = "" ; txtSDT.Text = "" ; txtMT.Text = "" ; btnThem.Text = "L u" ư ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceNSX.InsertParameters.Add( "msnsx" , txtMSNSX.Text.Trim()); SqlDataSourceNSX.InsertParameters.Add( "tennsx" , txtTNSX.Text.Trim()); SqlDataSourceNSX.InsertParameters.Add( "quocgia" , txtQG.Text.Trim()); SqlDataSourceNSX.InsertParameters.Add( "diachi" , txtDC.Text.Trim()); SqlDataSourceNSX.InsertParameters.Add( "sdt" , txtSDT.Text.Trim()); SqlDataSourceNSX.InsertParameters.Add( "mota" , txtMT.Text.Trim());
SqlDataSourceNSX.Insert(); this Title = "THÊM THÀNH CÔNG" ;
0 0 catch (System.Exception ex) { this Title = "CÓ L I THÊM NHÀ S N XU T = " Ỗ Ả Ấ + ex.Message; } btnThem.Text = "Thêm" ;
Bước 6: Viết mã lệnh (Codes) cho nút lênh “Hủy”: protected void btnHuy_Click(object sender, EventArgs e)
{ lblMSNSX.Visible = false ; lblTNSX.Visible = false ; lblQG.Visible = false ; lblDC.Visible = false ; lblSDT.Visible = false ; lblMT.Visible = false ; txtMSNSX.Visible = false ; txtTNSX.Visible = false ; txtQG.Visible = false ; txtDC.Visible = false ; txtSDT.Visible = false ; txtMT.Visible = false ; btnHuy.Visible = false ; btnThem.Text = "Thêm" ;
5.9.4.2 Sửa thông tin nhà sản xuất:
Bước 2: Viết lệnh SQL Sửa (Update) thông tin nhà sản xuất trong SqlDataSourceNSX tương ứng:
UPDATE NhaSanXuat SET tennsx = @tennsx, quocgia = @quocgia, diachi = @diachi, sdt = @sdt, mota = @mota WHERE (msnsx = @msnsx)
Hình 5-76 Thiết lập tham số sửa thông tin nhà sản xuất
5.9.4.3 Xóa thông tin nhà sản xuất:
B2: Viết lệnh SQL Xóa (Delete) thông tin nhà sản xuất trong SqlDataSourceNSX tương ứng :
DELETE FROM NhaSanXuat WHERE (msnsx = @msnsx)
Hình 5-77 Thiết lập tham số xóa thông tin nhà sản xuất
5.9.5.Lập trình (Codes) xử lý RBTV dữ liệu khi xóa nhà sản xuất:
Khi xóa nhà sản xuất (Table NhaSanXuat) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với 3 bảng: DMDA (Danh mục đồ ăn), TonCuaHang (Tồn cửa hàng) và CTDDH (Chi tiết đơn đặt hàng).
Hình 5-78 Trích DB liên quan xử lý RBTV dữ liệu khi xóa nhà sản xuất
Có 3 trường hợp xử lý RBTV dữ liệu:
+ Để xóa được “nhà sản xuất” người sử dụng cần xử lý “xóa đồ ăn” bằng cách xóa các đồ ăn thú cưng thuộc loại đồ ăn muốn xóa, nhưng cần phải xóa các chi tiết đơn đặt hàng và tồn cửa hàng liên quan đến các đồ ăn muỗn xóa.
+ Để xóa được “tồn cửa hàng” người sử dụng cần xử lý “thanh lý” bằng cách xóa các tồn cửa hàng liên quan đến các đồ ăn thú cưng mà người sử dụng người sử dụng muốn xóa.
+ Để xóa được “chi tiết đơn đặt hàng” người sử dụng cần xử lý “hủy chi tiết đơn đặt hàng” bằng cách xóa từng CTDDH hoặc xóa tất cả CTDDH của đơn hàng mà người sử dụng muốn xóa
5.9.5.2 Thiết kế 3 GridView phụ ngay trên Form quản lý FrQL_NSX.aspx
* Thiết kế 3 GridView phụ “danh mục đồ ăn”, “tồn cửa hàng” và “chi tiết đơn đặt hàng”:
Hình 5-79 Các GridvView xử lý RBTV dữ liệu khi xóa nhà sản xuất
Caption = DANH MỤC LOẠI ĐỒ ĂN THÚ CƯNG ĐƯỢC SẢN XUẤT BỞI NHÀ SẢN XUẤT ĐANG CHỌN
Caption = ĐỒ ĂN THÚ CƯNG ĐANG CHỌN CÒN TỒN TRONG CÁC CỬA HÀNG VỚI
Caption = ĐỒ ĂN THÚ CƯNG ĐANG CHỌN CÒN ĐẶT MUA TRÊN CÁC ĐƠN HÀNG SAU
* Câu lệnh Select trong GridViewDMDA, GridViewTCH và GridViewCTDDH:
SELECT * FROM [DMDA] WHERE ([msnsx] = @msnsx)
SELECT * FROM [TonCuaHang] WHERE ([msda] = @msda)
SELECT * FROM [CTDDH] WHERE ([msda] = @msda)
5.9.5.3 Xử lý các RBTV trên 3 GridView phụ “danh mục đồ ăn”, “đơn đặt hàng” và
“chi tiết đơn đặt hàng”
- Xóa đồ ăn[Delete]: Chính là câu lệnh xóa (Delete) được viết trong SqlDataSourceDMDA:
DELETE FROM DMDA WHERE (msda = @msda)
- Thanh lý[Delete] : Chính là câu lệnh xóa (Delete) được viết trong SqlDataSourceTCH: DELETE FROM TonCuaHang WHERE (msch = @msch) AND (msda = @msda)
Với msch = GridViewTCH.SelectedValue[1] msda = GridViewTCH.SelectedValue[2]
- Huỷ chi tiết đơn[ hàng[Delete]: Chính là câu lệnh xoá (delete) được viết trong SqlDataSourceCTDDH:
DELETE FROM CTDDH WHERE (msddh = @msddh) AND (msda = @msda)
Với msddh = GridViewCTDDH.SelectedValue[1] msda = GridViewCTDDH.SelectedValue[2]
Trang quản lý khu vực: FrQL_KV.aspx
5.10.1 Phân tích trang Quản lý khu vưc: FrQL_KV.aspx
+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý khu vực từ trang quản lý chung.
+ Liên quan 2 Tables sau: KhuVuc.
+ Chủ yếu: thực hiện các chức năng: thêm / sửa / xóa thông tin khu vực trong Table KhuVuc.
+ Chuỗi kết nối DB: 1G308NVQHDoAnThuCungOnlineConnectionString
5.10.2 Thiết kế (Design) trang quản lý khu vực: FrQl_KV.aspx
Hình 5-80 Thiết kế trang quản lý “khu vực”
[1] GridViewKV: Liệt kê các khu vực giao hàng cho đồ ăn thú cưng
Hình 5-81 Thiết kế laapj tham số hiển thị thông tin khu vực
Câu lệnh SQL kết nối DataBase:
Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)
[Gridview: Task] -> Edit Column // Selected Fields
DataField : cột dữ liệu (trong DB) được dùng
HeaderText sẽ tùy chỉnh theo tên của thuộc tính tương ứng
ReadOnly = true cho “mã khu vực”
Hình 5-82 Thiết lập trong GridViewKV
5.10.3 Lập trình (Codes) trang quản lý khu vực: FrQL_KV.aspx public partial class FrQL_KV : System.Web.UI.Page
{ static string us = "Vô Danh" ; protected void Page_Load( object sender, EventArgs e)
- 155 - if (Session[ "dn" ] != null ) us = Session[ "dn" ] as string ; // L y tên đăng nh p ấ ậ thành công t Session (đ ừ ượ c g i t login c a Masterpage) ử ừ ủ lblTieuDe.Text = "CHÀO M NG " Ừ + us + " - Đ N V I TRANG QU N LÝ KHU V C C A Ế Ớ Ả Ự Ủ
} protected void btnThem_Click( object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSKV.Visible = !lblMSKV.Visible; lblTKV.Visible = !lblTKV.Visible; txtMSKV.Visible = !txtMSKV.Visible; txtTKV.Visible = !txtTKV.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSKV.Text = "" ; txtTKV.Text = "" ; btnThem.Text = "L u" ư ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceKV.InsertParameters.Add( "mskv" , txtMSKV.Text.Trim()); SqlDataSourceKV.InsertParameters.Add( "tenkv" , txtTKV.Text.Trim());
SqlDataSourceKV.Insert(); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM KHU V C = " Ỗ Ự + ex.Message; }
} protected void btnHuy_Click( object sender, EventArgs e)
{ lblMSKV.Visible = false ; lblTKV.Visible = false ; txtMSKV.Visible = false ; txtTKV.Visible = false ; btnHuy.Visible = false ; btnThem.Text = "Thêm" ;
} protected void btnQuayVe_Click( object sender, EventArgs e)
5.10.4 Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý khu vực:
B1: Thiết kế nút lệnh [Thêm | Xóa | Sửa | Chọn] trên các dòng của Gridview
5.10.4.1 Thêm thông tin khu vực:
Bước 2: Viết lệnh SQL thêm thông tin khu vực trrong SqlDataSourceKV tương ứng:
INSERT INTO KhuVuc(mskv, tenkv) VALUES (@mskv, @tenkv)
Hình 5-83 Thiết lập tham số thêm mới khu vực
Bước 3: Thiết kế các TextBox, Button cho phép người sử dụng thêm thông tin khu vực.
Hình 5-84 Thiết kế các nút thêm mới khu vực
Bước 4: Người sử dụng ấn nút “Thêm” để tiến hành nghiệp vụ thêm thông tin khu vực vào DB.
Bước 5: Viết mã lệnh (Codes) cho nút lênh “Thêm”: protected void btnThem_Click(object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSKV.Visible = !lblMSKV.Visible; lblTKV.Visible = !lblTKV.Visible; txtMSKV.Visible = !txtMSKV.Visible; txtTKV.Visible = !txtTKV.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSKV.Text = "" ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceKV.InsertParameters.Add( "mskv" , txtMSKV.Text.Trim()); SqlDataSourceKV.InsertParameters.Add( "tenkv" , txtTKV.Text.Trim());
SqlDataSourceKV.Insert(); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM KHU V C = " Ỗ Ự + ex.Message; } btnThem.Text = "Thêm" ;
Bước 6: Viết mã lệnh (Codes) cho nút lênh “Hủy”: protected void btnHuy_Click(object sender, EventArgs e)
{ lblMSKV.Visible = false ; lblTKV.Visible = false ; txtMSKV.Visible = false ; txtTKV.Visible = false ; btnHuy.Visible = false ; btnThem.Text = "Thêm" ;
5.10.4.2 Sửa thông tin khu vực:
Bước 2: Viết lệnh SQL Sửa (Update) thông tin khu vực trong SqlDataSourceKV tương ứng:
UPDATE KhuVuc SET tenkv = @tenkv WHERE (mskv = @mskv)
Hình 5-85 Thiết lập tham số sửa thông tin khu vực
5.10.4.3 Xóa thông tin khu vực:
B2: Viết lệnh SQL Xóa (Delete) thông tin khu vực trong SqlDataSourceKV tương ứng:
DELETE FROM KhuVucWHERE (mskv = @mskv)
Hình 5-86 Thiết lập tham số sửa thông tin khu vực
5.10.5 Lập trình (Codes) xử lý RBTV dữ liệu khi xóa khu vực:
Khi xóa khu vực (Table KhuVuc) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với 5 bảng: NhanVien (Nhân viên), DonDatHang (Đơn đặt hàng), CTDDH (Chi tiết đơn đặt hàng), CuaHang (Cửa hàng) và TonCuaHang (Tồn cửa hàng).
Hình 5-87 Trích DB liên quan xử lý RBTV dữ liệu khi xóa khu vực
Có 5 trường hợp xử lý RBTV dữ liệu:
+ Để xóa được “khu vực” bán hàng người sử dụng cần xử lý “hủy công tác” với Table NhanVien bằng cách xóa các thôgn tin của nhân viên thuộc khu vực đó.
+ Để xóa được “khu vực” bán hàng người sử dụng cần xử lý “hủy đơn” với Table DonDatHang bằng cách xóa các thôgn tin của đơn đặt hàng thuộc khu vực đó.
+ Để xóa được “chi tiết đơn đặt hàng” người sử dụng cần xử lý “hủy chi tiết đơn đặt hàng” bằng cách xóa từng CTDDH hoặc xóa tất cả CTDDH của đơn hàng mà người sử dụng muốn xóa
+ Để xóa được “khu vực” bán hàng người sử dụng cần xử lý “chuyển khu vực” với Table CuaHang bằng cách thay đổi khu vực bán hàng của cửa hàng thuộc khu vực đó.
+ Để xóa được “tồn cửa hàng” người sử dụng cần xử lý “thanh lý” bằng cách xóa các tồn cửa hàng liên quan đến các đồ ăn thú cưng mà người sử dụng người sử dụng muốn xóa.
5.10.5.2 Thiết kế 5 GridView phụ ngay trên Form quản lý FrQL_KV.aspx
* Thiết kế 5 GridView phụ “nhân viên”, “đơn đặt hàng”, “chi tiết đơn đặt hàng”, “cửa hàng” và “tồn cửa hàng”:
Hình 5-88 Các GridvView xử lý RBTV dữ liệu khi xóa khu vực
Caption = DANH SÁCH NHÂN VIÊN CÔNG TÁC TẠI CỬA HÀNG ĐANG CHỌN
Caption = DANH SÁCH ĐƠN ĐẶT HÀNG THUỘC TẠI KHU VỰC ĐANG CHỌN
Caption = CHI TIẾT ĐƠN ĐẶT HÀNG ĐANG CHỌN
Caption = DANH SÁCH CỬA HÀNG TẠI KHU VỰC ĐANG CHỌN
Caption = TỒN CỬA HÀNG ĐANG CHỌN
* Câu lệnh Select trong GridViewNV, GridViewDDH , GridViewCTDDH, GridViewCH và GridViewTCG:
SELECT * FROM [NhanVien] WHERE ([mskv] = @mskv)
SELECT * FROM [DonDatHang] WHERE ([mskv] = @mskv)
SELECT * FROM [CTDDH] WHERE ([msddh] = @msddh)
SELECT * FROM [CuaHang] WHERE ([mskv] = @mskv)
SELECT * FROM [TonCuaHang] WHERE ([msch] = @msch)
5.10.5.3 Xử lý các RBTV trên 5 GridView phụ “nhân viên”, “đơn đặt hàng”, “chi tiết đơn đặt hàng”, “cửa hàng” và “tồn cửa hàng”
- Hủy công tác[Delete]: Chính là câu lệnh xóa (Delete) được viết trong SqlDataSourceNV:
DELETE FROM NhanVien WHERE (msnv = @msnv)
- Hủy đơn[Delete]: Chính là câu lệnh xóa (Delete) được viết trong SqlDataSourceDDH:
DELETE FROM DonDatHan g WHERE (msddh = @msddh)
- Hủy chi tiết đơn[Delete]: Chính là câu lệnh xóa (Delete) được viết trong
DELETE FROM CTDDH WHERE (msddh = @msddh) AND (msda = @msda)
Với msddh = GridViewCTDDH.SelectedValue[1] msda = GridViewCTDDH.SelectedValue[2]
- Chuyển khu vực[Update]: Chính là câu lệnh xóa (Delete) được viết trong
UPDATE CuaHang SET mskv = @mskv WHERE (msch = @msch))
- Thanh lý[Delete]: Chính là câu lệnh xoá (delete) được viết trong SqlDataSourceTCH:
DELETE FROM TonCuaHang WHERE (msch = @msch) AND (msda = @msda)
Với msch = GridViewTCH.SelectedValue[1] msda = GridViewTCH.SelectedValue[2]
Trang quản lý khách hàng: FrQL_KH.aspx
5.11.1 Phân tích trang Quản lý khách hàng: FrQL_KH.aspx
+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý khách hàng từ trang quản lý chung.
+ Liên quan 2 Tables sau: KhachHang.
+ Chủ yếu: thực hiện các chức năng: sửa / xóa thông tin khách hàng trong Table KhachHang.
+ Chuỗi kết nối DB: 1G308NVQHDoAnThuCungOnlineConnectionString
5.11.2 Thiết kế (Design) trang quản lý khách hàng: FrQl_KH.aspx
Hình 5-89 Thiết kế trang quản lý “khách hàng”
[1] GridViewKH: Liệt kê các khách hàng đặt mua đồ ăn thú cưng
Hình 5-90 Thiết lập tham số hiển thị thông tin khách hàng
Câu lệnh SQL kết nối DataBase:
Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)
[Gridview: Task] -> Edit Column // Selected Fields
DataField : cột dữ liệu (trong DB) được dùng
HeaderText sẽ tùy chỉnh theo tên của thuộc tính tương ứng
ReadOnly = true cho “mã khách hàng”
Hình 5-91 Thiết lập trong GridViewKH
5.11.3 Lập trình (Codes) trang quản lý khách hàng: FrQL_KH.aspx public partial class FrQL_KH : System.Web.UI.Page
{ static string us = "Vô Danh" ; protected void Page_Load( object sender, EventArgs e)
{ if (Session[ "dn" ] != null ) us = Session[ "dn" ] as string ; // L y tên đăng nh p ấ ậ thành công t Session (đ ừ ượ c g i t login c a Masterpage) ử ừ ủ lblTieuDe.Text = "CHÀO M NG " Ừ + us + " - Đ N V I TRANG QU N LÝ KHÁCH HÀNG Ế Ớ Ả
} protected void btnQuayVe_Click( object sender, EventArgs e)
5.11.4 Lập trình (Codes) SỬA _ XÓA trang quản lý khách hàng:
B1: Thiết kế nút lệnh [Xóa | Sửa | Chọn] trên các dòng của Gridview
5.11.4.1 Sửa thông tin khách hàng:
Bước 2: Viết lệnh SQL Sửa (Update) thông tin khách hàng trong SqlDataSourceKH tương ứng:
UPDATE KhachHang SET tenkh = @tenkh, diachi = @diachi, sdt = @sdt, diem @diem WHERE (mskh = @mskh)
Hình 5-92 Thiết lập tham số sửa thông tin khách hàng
5.11.4.2 Xóa thông tin khách hàng:
B2: Viết lệnh SQL Xóa (Delete) thông tin khách hàng trong SqlDataSourceKH tương ứng:
DELETE FROM KhachHang WHERE (mskh = @mskh)
Hình 5-93 Thiết lập tham số xóa thôgn tin khách hàng
5.11.5 Lập trình (Codes) xử lý RBTV dữ liệu khi xóa khách hàng:
Khi xóa khách hàng (Table KhachHang) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với 2 bảng: NhanVien (Nhân viên), DonDatHang (Đơn đặt hàng), CTDDH (Chi tiết đơn đặt hàng), CuaHang (Cửa hàng) và TonCuaHang (Tồn cửa hàng).
Hình 5-94 Trích DB liên quan xử lý RBTV dữ liệu khi xóa khách hàng
Có 2 trường hợp xử lý RBTV dữ liệu:
+ Để xóa được thông tin “khách hàng” người sử dụng cần xử lý “hủy đơn” với Table DonDatHang bằng cách xóa các thôgn tin của đơn đặt hàng thuộc khách hàng đó.
+ Để xóa được “chi tiết đơn đặt hàng” người sử dụng cần xử lý “hủy chi tiết đơn đặt hàng” bằng cách xóa từng CTDDH hoặc xóa tất cả CTDDH của đơn hàng mà người sử dụng muốn xóa
5.11.5.2 Thiết kế 2 GridView phụ ngay trên Form quản lý FrQL_KH.aspx
* Thiết kế 2 GridView phụ “đơn đặt hàng” và “chi tiết đơn đặt hàng:
Hình 5-95 Các GridvView xử lý RBTV dữ liệu khi xóa khách hàng
Caption = CÁC ĐƠN ĐẶT HÀNG CỦA KHÁCH HÀNG ĐANG CHỌN
Caption = CHI TIẾT CÁC ĐỒ ĂN CHO THÚ CƯNG TRONG ĐƠN ĐẶT HÀNG ĐANG CHỌN
* Câu lệnh Select trong GridViewDDH và GridViewCTDDH:
SELECT * FROM [DonDatHang] WHERE ([mskh] = @mskh)
SELECT * FROM [CTDDH] WHERE ([msddh] = @msddh)
5.11.5.3 Xử lý các RBTV trên 2 GridView phụ “đơn đặt hàng” và “chi tiết đơn đặt hàng”
- Hủy đơn[Delete]: Chính là câu lệnh xóa (Delete) được viết trong SqlDataSourceDDH:
DELETE FROM DonDatHang WHERE (msddh = @msddh)
- Hủy chi tiết đơn[Delete]: Chính là câu lệnh xóa (Delete) được viết trong
DELETE FROM CTDDH WHERE (msddh = @msddh) AND (msda = @msda)
Với msddh = GridViewCTDDH.SelectedValue[1] msda = GridViewCTDDH.SelectedValue[2]
Trang quản lý đơn đặt hàng: FrQL_DDH.aspx
5.12.1 Phân tích trang Quản lý đơn đặt hàng: FrQL_DDH.aspx
+ Dành cho nhân viên sau khi đăng nhập thành công và chọn chức năng quản lý đơn đặt hàng từ trang quản lý chung.
+ Liên quan 1 Tables sau: DonDatHang.
+ Chủ yếu: thực hiện các chức năng: sửa / xóa thông tin đơn đặt hàng trong Table DonDatHang.
+ Chuỗi kết nối DB: 1G308NVQHDoAnThuCungOnlineConnectionString
5.12.2 Thiết kế (Design) trang quản lý đơn đặt hàng: FrQl_DDH.aspx
Hình 5-96 Thiết kế trang quản lý “đơn đặt hàng”
[1] DropDownListNV: Chọn “mã nhân viên”
Field for the Value : msnv
Câu lệnh kết nối DB: SELECT * FROM [NhanVien]
[2] DropDownListKV: Chọn “mã khu vực”
Field for the Value : mskv
Câu lệnh kết nối DB: SELECT * FROM [KhuVuc]
[3] DropDownListKH: Chọn “mã khách hàng”
Field for the Value : mskh
Câu lệnh kết nối DB: SELECT * FROM [KhachHang]
[4] GridViewDDH: Liệt kê các đơn đặt hàng thuộc nhân viên, khu vực và khách hàng (dùng Where)
Có mệnh đề WHERE (mskv = @mskv) AND (msnv = @msnv) AND (mskh @mskh)
Hình 5-97 Thiết lập tham số hiển thị thông tin đơn đặt hàng
Câu lệnh SQL kết nối DataBase:
SELECT msddh, msnv, mskh, mskv, nguoinhan, diachigiao, sdtnguoinhan, thoihan, thoigianlap, tinhtrang, ghichu FROM DonDatHang WHERE (mskv @mskv) AND (msnv = @msnv) AND (mskh = @mskh)
Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)
[Gridview: Task] -> Edit Column // Selected Fields
DataField : cột dữ liệu (trong DB) được dùng
HeaderText sẽ tùy chỉnh theo tên của thuộc tính tương ứng
ReadOnly = true cho “mã đơn đặt hàng”
Hình 5-98 Thiết lập trong GridViewDDH
5.12.3 Lập trình (Codes) trang quản lý đơn đặt hàng: FrQL_DDH.aspx public partial class FrQL_DDH : System.Web.UI.Page
{ static string us = "Vô Danh" ; protected void Page_Load( object sender, EventArgs e)
{ if (Session[ "dn" ] != null ) us = Session[ "dn" ] as string ; // L y tên đăng nh p ấ ậ thành công t Session (đ ừ ượ c g i t login c a Masterpage) ử ừ ủ lblTieuDe.Text = "CHÀO M NG " Ừ + us + " - Đ N V I TRANG QU N LÝ Đ N Đ T HÀNG Ế Ớ Ả Ơ Ặ
} protected void DropDownListNV_SelectedIndexChanged( object sender, EventArgs e) { if (DropDownListNV.SelectedValue.Trim() == "*"
SqlDataSourceDDH.SelectCommand = "SELECT * FROM DonDatHang" ;
} else if (DropDownListNV.SelectedValue.Trim() == "*"
SqlDataSourceDDH.SelectCommand = "SELECT * FROM DonDatHang WHERE (mskh =
} else if (DropDownListNV.SelectedValue.Trim() == "*"
SqlDataSourceDDH.SelectCommand = "SELECT * FROM DonDatHang WHERE (mskv =
} else if (DropDownListNV.SelectedValue.Trim() == "*"
SqlDataSourceDDH.SelectCommand = "SELECT * FROM DonDatHang WHERE (mskv =
} else if (DropDownListNV.SelectedValue.Trim() != "*"
SqlDataSourceDDH.SelectCommand = "SELECT * FROM DonDatHang WHERE (msnv =
} else if (DropDownListNV.SelectedValue.Trim() != "*"
SqlDataSourceDDH.SelectCommand = "SELECT * FROM DonDatHang WHERE (msnv =
} else if (DropDownListNV.SelectedValue.Trim() != "*"
SqlDataSourceDDH.SelectCommand = "SELECT * FROM DonDatHang WHERE (msnv =
} lblMSNV.Text = DropDownListNV.SelectedValue; lblMSKV.Text = DropDownListKV.SelectedValue; lblMSKH.Text = DropDownListKH.SelectedValue;
} protected void btnQuayVe_Click( object sender, EventArgs e)
} static int pos = 0; protected void GridViewDDH_RowEditing( object sender, GridViewEditEventArgs e) { pos = e.NewEditIndex;
- 177 - protected void GridViewDDH_RowCommand( object sender, GridViewCommandEventArgs e)
((TextBox)GridViewDDH.Rows[pos].FindControl( "txtNVGH" )).Text =
((DropDownList)GridViewDDH.Rows[pos].FindControl( "DropDownListNVGH" )).SelectedValue.Trim();
5.12.4 Lập trình (Codes) SỬA _ XÓA trang quản lý đơn đặt hàng:
B1: Thiết kế nút lệnh [Xóa | Sửa | Chọn] trên các dòng của Gridview
5.12.4.1 Sửa thông tin đơn đặt hàng:
Bước 2: Viết lệnh SQL Sửa (Update) thông tin đơn đặt hàng trong
UPDATE DonDatHang SET nguoinhan = @nguoinhan, diachigiao = @diachigiao, sdtnguoinhan = @sdtnguoinhan, thoihan = @thoihan, thoigianlap = @thoigianlap, tinhtrang
= @tinhtrang, ghichu = @ghichu, msnv = @msnv WHERE (msddh = @msddh)
Hình 5-99 Thiết lập tham số sửa thông tin đơn đặt hàng
5.12.4.2 Xóa thông tin đơn đặt hàng:
B2: Viết lệnh SQL Xóa (Delete) thông tin đơn đặt hàng trong SqlDataSourceDDH tương ứng :
DELETE FROM DonDatHang WHERE (msddh = @msddh)
Hình 5-100 Thiết lập tham số xóa thông tin đơn đặt hàng
5.12.5 Lập trình (Codes) xử lý RBTV dữ liệu khi xóa đơn đặt hàng:
Khi xóa đơn đặt hàng (Table DonDatHang) thì sẽ bị ảnh hưởng RBTV dữ liệu đối với 1 bảng: CTDDH (Chi tiết đơn đặt hàng).
Hình 5-101 Trích DB liên quan xử lý RBTV dữ liệu khi xóa đơn đặt hàng
Có 1 trường hợp xử lý RBTV dữ liệu:
+ Để xóa “đơn đặt hàng” người sử dụng cần xử lý “hủy chi tiết đơn” bằng cách xóa từng CTDDH hoăc xóa tất cả CTDDH của đơn hàng ấy.
5.12.5.2 Thiết kế 1 GridView phụ ngay trên Form quản lý FrQL_DDH.aspx
* Thiết kế 1 GridView phụ “chi tiết đơn đặt hàng”:
Hình 5-102 Các GridvView xử lý RBTV dữ liệu khi xóa khách hàng
Caption = CHI TIẾT ĐƠN ĐẶT HÀNG ĐANG CHỌN
* Câu lệnh Select trong GridViewCTDDH:
5.5.5.Lập trình (Codes) xử lý RBTV dữ liệu khi xóa nhân viên:
Hình 5-44 Trích DB liên quan xử lý RBTV dữ liệu khi xóa nhân viên
Có 2 trường hợp xử lý RBTV dữ liệu:
+ Nhân viên cần xóa vẫn còn đơn hàng chưa giải quyết: xử lý “hủy đơn hàng” bằng cách xóa đơn hàng mà nhân viên ấy.
+ Nhân viên xóa đơn hàng cần phải xóa chi tiết trong đơn hàng (CTDDH): xử lý “hủy chi tiết đơn” bằng cách xóa từng CTDDH hoăc xóa tất cả CTDDH của đơn hàng mà nhân viên ấy lập.
5.5.5.2 Thiết kế 2 GridView phụ ngay trên Form quản lý FrQL_NV.aspx
* Thiết kế 2 GridView phụ “đơn đặt hàng” và “chi tiết đơn đặt hàng”:
Caption = CÁC HÓA ĐƠN ĐẶT HÀNG ĐƯỢC LẬP BỞI NHÂN VIÊN ĐANG CHỌN
Caption = CHI TIẾT CÁC ĐỒ ĂN CHO THÚ CƯNG TRONG ĐƠN ĐẶT HÀNG ĐAN CHỌN
* Câu lệnh Select trong GridViewDDH và GridViewCTDDH:
SELECT * FROM [DonDatHang] WHERE ([msnv] = @msnv)
SELECT * FROM [CTDDH] WHERE ([msddh] = @msddh)
5.5.5.3 Xử lý các RBTV trên 2 GridView phụ “đơn đặt hàng” và “chi tiết đơn đặt hàng”
- Hủy đơn[Delete]: Chính là câu lệnh xóa (Delete) được viết trong SqlDataSourceDDH
DELETE FROM DonDatHang WHERE (msddh = @msddh)
- Bàn giao đơn hàng[Update]: Chính là câu lệnh cập nhật (Update) được viết trong SqlDataSourceDDH:
UPDATE DonDatHang SET msnv = @msnv, ghichu = @ghichu WHERE (msddh =
- Huỷ chi tiết đơn[Delete]: Chính là câu lệnh xoá (delete) được viết SqlDataSourceCTDDH:
DELETE FROM CTDDH WHERE (msddh = @msddh) AND (msda = @msda)
Với msddh = GridViewCTDDH.SelectedValue[1] msda = GridViewCTDDH.SelectedValue[2]
5.6.Trang quản lý cửa hàng: FrQL_CH.aspx trang quản lý chung.
+ Liên quan 2 Tables sau: CuaHang, KhuVuc.
+ Chủ yếu: thực hiện các chức năng: thêm / sửa / xóa thông tin cửa hàng trong Table CuaHang.
+ Chuỗi kết nối DB: 1G308NVQHDoAnThuCungOnlineConnectionString
5.6.2.Thiết kế (Design) trang quản lý cửa hàng: FrQl_CH.aspx
Hình 5-46 Thiết kế trang quản lý “cửa hàng”
[1] DropDownListKV: Chọn “mã khu vực”
Field for the Value : mskv
Câu lệnh kết nối DB: SELECT * FROM [KhuVuc]
[2] GridViewCH: Liệt kê các cửa hàng thuộc khu vực (dùng Where)
Có mệnh đề WHERE (mskv = @mskv)
Hình 5-47 Thiết lập tham số hiển thị thông tin cửa hàng
Câu lệnh SQL kết nối DataBase:
SELECT * FROM [CuaHang] WHERE ([mskv] = @mskv)
Task->Edit Columns: HeaderText, DataField (Tự động gán cột dữ liệu tương ứng)
[Gridview: Task] -> Edit Column // Selected Fields
DataField : cột dữ liệu (trong DB) được dùng
HeaderText sẽ tùy chỉnh theo tên của thuộc tính tương ứng
ReadOnly = true cho “mã cửa hàng”
Hình 5-48 Thiết lập trong GridViewCH
5.6.3.Lập trình (Codes) trang quản lý cửa hàng: FrQL_CH.aspx public partial class FrQL_CH : System.Web.UI.Page
{ static string us = "Vô Danh" ; protected void Page_Load( object sender, EventArgs e)
{ if (Session[ "dn" ] != null ) us = Session[ "dn" ] as string ; // L y tên đăng nh p ấ ậ thành công t Session (đ ừ ượ c g i t login c a Masterpage) ử ừ ủ lblTieuDe.Text = "CHÀO M NG " Ừ + us + " - Đ N V I TRANG QU N LÝ C A HÀNG BÁN Ế Ớ Ả Ử Đ ĂN THÚ C NG C A TI M G3.08 NVQH -" Ồ Ư Ủ Ệ ;
} protected void DropDownListKV_SelectedIndexChanged( object sender, EventArgs e) {
//Ch n xem t t c ọ ấ ả if (DropDownListKV.SelectedValue.Trim() == "*" ) // N u ch n t t c ế ọ ấ ả
SqlDataSourceCH.SelectCommand = "SELECT * FROM [CuaHang]" ; // vi t l i ế ạ select không where btnThem.Enabled = false ; // N u ch n nhóm là t t c thì không th đ ăn m i ế ọ ấ ả ể ồ ớ đ ượ c do không bi t kà nhóm đ ăn nào ế ồ
- 111 - btnThem.ToolTip = DropDownListKV.ToolTip = "B N PH I CH N M T NHÓM Đ ĂN Ạ Ả Ọ Ộ Ồ CHO THÚ C NG M I THÊM Đ ĂN M I Đ Ư Ớ Ồ Ớ ƯỢ C !" ;
{ btnThem.Enabled = true ; // Đã ch n nhóm đ ăn c th đ ọ ồ ụ ể ượ c thêm btnThem.ToolTip = DropDownListKV.ToolTip = "" ; // Không nh c n a ắ ữ
// Hi n th mã th ể ị ươ ng hi u ệ lblKV.Text = DropDownListKV.SelectedValue;
} protected void btnThem_Click( object sender, EventArgs e)
//B1: n or hi n các ô textbox, đ nhân viên chu n b thêm thông tin áo Ẩ ệ ể ẩ ị lblMSCH.Visible = !lblMSCH.Visible; lblTCH.Visible = !lblTCH.Visible; lblDC.Visible = !lblDC.Visible; lblSDT.Visible = !lblSDT.Visible; lblSC.Visible = !lblSC.Visible; lblCT.Visible = !lblCT.Visible; txtMSCH.Visible = !txtMSCH.Visible; txtTCH.Visible = !txtTCH.Visible; txtDC.Visible = !txtDC.Visible; txtSDT.Visible = !txtSDT.Visible; txtSC.Visible = !txtSC.Visible; txtCT.Visible = !txtCT.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSCH.Text = "" ; txtTCH.Text = "" ; txtDC.Text = "" ; txtSDT.Text = "" ; txtSC.ToolTip = "S c ch a > 0" ứ ứ ; txtSC.Text = "" ; txtCT.ToolTip = "Cò tr ng > 0" ố ;
SqlDataSourceCH.InsertParameters.Add( "msch" , txtMSCH.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "tench" , txtTCH.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "diachi" , txtDC.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "sdt" , txtSDT.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "succhua" ,
System.Data.DbType.Int32, txtSC.Text.Trim());
System.Data.DbType.Int32, txtCT.Text.Trim());
SqlDataSourceCH.Insert(); this Title = "THÊM THÀNH CÔNG" ;
} catch (System.Exception ex) { this Title = "CÓ L I THÊM C A HÀNG = " Ỗ Ử + ex.Message;} btnThem.Text = "Thêm" ;
} protected void btnHuy_Click( object sender, EventArgs e)
{ lblMSCH.Visible = false ; lblTCH.Visible = false ; lblDC.Visible = false ;
0 0 lblSDT.Visible = false ; lblSC.Visible = false ; lblCT.Visible = false ; txtMSCH.Visible = false ; txtTCH.Visible = false ; txtDC.Visible = false ; txtSDT.Visible = false ; txtSC.Visible = false ; txtCT.Visible = false ; btnHuy.Visible = false ; btnThem.Text = "Thêm" ;
} protected void btnQuayVe_Click( object sender, EventArgs e)
5.6.4.Lập trình (Codes) THÊM _ SỬA _ XÓA trang quản lý cửa
B1: Thiết kế nút lệnh [Thêm | Xóa | Sửa | Chọn] trên các dòng của Gridview
5.6.4.1 Thêm thông tin cửa hàng:
Bước 2: Viết lệnh SQL thêm thông tin cửa hàng trrong SqlDataSourceCH tương ứng:
INSERT INTO CuaHang(msch, mskv, tench, diachi, sdt, succhua, controng) VALUES (@msch, @mskv, @tench, @diachi, @sdt, @succhua, @controng)
Hình 5-49 Thiết lập tham số thêm mới cửa hàng
Bước 3: Thiết kế các TextBox, Button cho phép người sử dụng thêm thông tin cửa hàng.
Hình 5-50 Thiết kế các nút thêm mới cửa hàng
Bước 4: Không cho phép “Thêm” cửa hàng mới khi người sử dụng chọn “ Tất cả ” trong
DropDownListKV Vì khi thêm mới, được hiểu là thêm mới vào “khu vực” đã chọn trong DropDownListKV.
Bước 5: Viết mã lệnh (Codes) cho nút lênh “Thêm” nhân viên mới: protected void btnThem_Click( object sender, EventArgs e)
{ lblDC.Visible = !lblDC.Visible; lblSDT.Visible = !lblSDT.Visible; lblSC.Visible = !lblSC.Visible; lblCT.Visible = !lblCT.Visible; txtMSCH.Visible = !txtMSCH.Visible; txtTCH.Visible = !txtTCH.Visible;
0 0 txtDC.Visible = !txtDC.Visible; txtSDT.Visible = !txtSDT.Visible; txtSC.Visible = !txtSC.Visible; txtCT.Visible = !txtCT.Visible; btnHuy.Visible = !btnHuy.Visible;
// B2 đ i nhãn button thêm thành l u L u thành thêm ổ ư ư if (btnThem.Text == "Thêm" ) // thêm m i => L u ớ ư
{// xóa tr ng các ô textbox đ Nhân viên chu n b nh p thông tin món ăn m i ố ể ẩ ị ậ ớ txtMSCH.Text = "" ; txtTCH.Text = "" ; txtDC.Text = "" ; txtSDT.Text = "" ; txtSC.ToolTip = "S c ch a > 0" ứ ứ ; txtSC.Text = "" ; txtCT.ToolTip = "Cò tr ng > 0" ố ; txtCT.Text = "" ; btnThem.Text = "L u" ư ;
{// l u thông tin áo m i vào database ư ớ try
SqlDataSourceCH.InsertParameters.Add( "msch" , txtMSCH.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "tench" , txtTCH.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "diachi" , txtDC.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "sdt" , txtSDT.Text.Trim()); SqlDataSourceCH.InsertParameters.Add( "succhua" ,
System.Data.DbType.Int32, txtSC.Text.Trim());
System.Data.DbType.Int32, txtCT.Text.Trim());
SqlDataSourceCH.Insert(); this Title = "THÊM THÀNH CÔNG" ;
TRIỂN KHAI PHÁT HÀNH WEBAPP 199 6.1 Giới thiệu về Host miễn phí somee
Giới thiệu sản phẩm WebApp quản lý bán đồ ăn thú cưng online trên somee .203 Chương 7: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỒ ÁN 211 7.1 Kết luận
Chương 7: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỒ ÁN
7.1 Kết luận 211 7.1.1 Những kết quả đạt được 211 7.1.2 Hạn chế 211 7.2 Hướng phát triển 211 7.2.1 Hướng khắc phục các hạn chế 211 7.2.2 Hướng mở rộng ĐỒ ÁN HỌC PHẦN 212
DANH MỤC TÀI LIỆU THAM KHẢO 21
TRƯỜNG ĐẠI HỌC TÀI CHÍNH - MARKETING
KHOA CÔNG NGHỆ THÔNG TIN
PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN HỌC PHẦN
Giảng viên: ThS GVC Võ Xuân Thể
Sinh viên thực hiện: Nguyễn Võ Quốc Huy, 19DTH02
Thời gian thực hiện: 30/08/2021 đến 26/11/2021
Yêu cầu của ĐỒ ÁN HỌC PHẦN & Cơ cấu điểm
Lý thuyết: Cơ sở lý thuyết HP Lập trình Web (4 tín chỉ) bao gồm lập trình Web giao dịch và lập trình Web quản lý trên nền tảng Công nghệ ASP.NET
Lập trình phát triển WebApp hệ thống bán đồ ăn thú cưng online trực tuyến (online), bao gồm 2 phần:
+ Giao dịch mua & bán đồ ăn thú cưng
MasterPage.Master: Mẫu trang giao dịch kiêm quản lý bán đồ ăn thú cưng
HomePage.aspx: Trang chủ, trưng bày các mẫu đồ ăn thú cưng;
GioHang.aspx: Giỏ hàng của khách hàng chọn mua đồ ăn thú cưng trực tuyến; FrDatHang.aspx: Đặt mua các đồ ăn dành cho thú cưng;
+ Quản lý MasterPage.Master: Sử dụng Master Giao dịch (nêu trên);
Quản lý chung: có xử lý đăng nhập Login;
Quản lý danh muc các hoạt động về bán đồ ăn thú cưng : Thêm, Xóa, Sửa, RBTV; Chuyển nhóm loại đồ ăn thú cưng;
+ Phát hành WebApp lên Host miễm phí: somee.com
GIẢNG VIÊN Ngày 08 tháng 09 năm 2021
Chương 1: GIỚI THIỆU ĐỒ ÁN CỦA HP
1.1 Tổng quan về ĐỒ ÁN HỌC PHẦN ĐỒ ÁN HỌC PHẦN thiết kế và lập trình phát triển WebApp bán đồ ăn thú cưng trực tuyến trên nền tảng công nghệ ASP.NET : phiên bản 4.7.2 với công cụ MS Visual Studio.NET 2019, dùng ngôn ngữ lập trình C#.NET: G308NVQHDoAnThuCungOnline
Hệ thống WebApp nêu trên được triển khai thực nghiệm trên Host Web của www.somee.com với URL là: http://doanpetg308nvqhuy.somee.com OR http://www.doanpetg308nvqhuy.somee.com
Hệ thống CSDL dùng cho WebApp nên trên 1G308NVQHDoAnThuCungOnline.bak (MS SQL 2019) được thiết kế và cập nhật trên MS SQL Server 2019 (trên somee là : MS
1.2 Nội dung chuyên môn chính của ĐỒ ÁN HỌC PHẦN
1.3 Công cụ và nền tảng kỹ thuật thực hiện ĐỒ ÁN HỌC PHẦN
+ ASP.NET 4.7.2 trên MS Visual Studio NET 2019
+ Hệ quản trị CSDL MS SQL Server 2014 trên Local
+ Free Host Web: some.com
1.4 Sản phẩm của ĐỒ ÁN HỌC PHẦN
+ Hệ thống WebApp bán đồ ăn thú cưng trực tuyến (online) dạng Local trên PC:
+ Hệ thống WebApp bán đồ ăn thú cưng trực tuyến (online) dạng Online trên somee: http://doanpetg308nvqhuy.somee.com OR http://www.doanpetg308nvqhuy.somee.com
1.5 Bố cục của báo cáo
Báo cáo gồm những nội dung như sau:
Chương 1 Giới thiệu đồ án của HP là Hệ thống WebApp bán đồ ăn thú cưng trực tuyến
(online) Chương 2 Các cơ sở lý thuyết của HP Lập trình Web (4 TC) phục việc thực hiện đề tài HP Chương 3 Thiết kế và cập nhật CSDL phục vụ WebApp bán đồ ăn thú cưng
Chương 4 Thiết kế và lập trình WebApp phần giao dịch trực tuyến của khách hàng mua đồ thú cưng
Chương 5 Thiết kế và lập trình WebApp phần quản lý trực tuyến của cơ sở bán đồ ăn thú cưng Chương 6 Triển khai và phát hành WebApp bán đồ ăn thú cưng trực tuyến trên Host: somee Chương 7 Tổng kết các kết quả đạt được và còn hạn chế của đồ án, đồng thời đề xuất hướng khắc phục hạn chế và phát triển Đồ án.
Chương 2: CƠ SỞ LÝ THUYẾT CỦA HỌC PHẦN
2 1 Giới thiệu về lập trình WebApp trên ASP NET
2.1 Giới thiệu về lập trình WebApp trên ASP.NET
2.2 Phát triển WebApp ASP.NET đơn giản có CSDL dùng ADO.NET 2.3 Master Page = Mẫu trang web
2.3.1 Căn bản về MASTER PAGE
2.3.1.1.Khái niệm Masterpage (mẫu trang web)
2.3.1.1.2 Số lượng Masterpage trong 1 Websites
2.3.1.1.3 Các thành phần trên Masterpage
2.3.1.3.Xây dựng Mẫu trang (Masterpage)
2.3.1.3.2 VIẾT THỦ TỤC ẨN / HIỆN Login
2.4 Phát triển các chức năng GIAO DỊCH trên WebApp ASP.NET
2.4.1 Trưng bày sản phẩm (dịch vụ) trên DataList
2.4.3 Đặt hàng và thanh toán
2.5 Phát triển các chức năng QUẢN LÝ trên WebApp ASP.NET
2.5.1 Quản lý đăng nhập và bảo mật
2.5.3 Các chức năng thao tác dữ liệu: Thêm _ Sửa _ Xóa
2.6 Xử lý Ràng buộc toàn vẹn dữ liệu (RBTV) trên CSDL trong
2.6.1 Giới thiệu về lập trình xử lý RBTV dữ liệu trên CSDL trong ASP.NET
2.6.2 Thiết kế hệ thống xử lý RBTV dữ liệu
2.6.3 Lập trình hệ thống xử lý RBTV dữ liệu
2.7 Lập trình thủ tục Chuyển nhóm dữ liệu trong ASP.NET
2.7.1 Giới thiệu về lập trình Chuyển nhóm dữ liệu trên CSDL trong ASP.NET 2.7.2 Thiết kế hệ thống xử lý Chuyển nhóm dữ liệu
2.7.3 Lập trình hệ thống xử lý Chuyển nhóm dữ liệu
2.8 Lập trình thủ tục giao dịch Đặt hàng (Order)
2.8.1 Giới thiệu về lập trình xử lý giao dịch đặt hàng trong ASP.NET
2.8.3 Chức năng đơn đặt hàng
2.8.4 Chức năng chi tiết đơn hàng
2.8.5 Xử lý lưu trữ vào DB
2.9 Triển khai phát hành WebApp ASP.NET trên Internet (hoặc
2.10.Giới thiệu về lập trình WebApp trên PHP
Chương 3: THIẾT KẾ VÀ CẬP NHẬT CSDL PHỤC VỤ
3.1.Phân tích và thiết kế DB
Hệ thống DB phục vụ hoạt động WebApp bán đồ ăn thú cưng trực tuyến như sau:
+ Thành phần chính là bảng danh mục đồ ăn ( DanhMucDoAn ) gồm các thuộc tính về thông tin đồ ăn thú cưng: mã số đồ ăn (msda), mã số loại đồ ăn (msda), mã số nhà sản xuất (msnsx), tên đồ ăn (tenda), giá bán (giaban), đơn vị tính (dvt), ngày sản xuất (nsx), hạn sử dụng (hsd), khối lượng (khoiluong), thành phần (thanhphan), hướng dẫn sử dụng (hdsudung), hình ảnh (hinh ảnh) và mô tả (mota).
+ Mỗi đồ ăn thú cưng được sản xuất bởi một nhà sản xuất Bảng nhà sản xuất ( NhaSanXuat ) gồm các thuộc tính sau: mã nhà sản xuất (msnsx), tên nhà sản xuất (tennsx), quốc gia (quocgia), địa chỉ (diachi), số điện thoại (sdt) và mô tả (mota).
+ Mỗi đồ ăn thú cưng chỉ dành cho một loại thú cưng Bảng loại đồ ăn ( LoaiDoAn ) gồm các thuộc tính sau: mã số loại (msloai), tên loại (tenloai) và mô tả (mota).
+ Mỗi đồ ăn thú cưng có thể được bán tại nhiều cửa hàng khác nhau trên nhiều khu vực Bảng cửa hàng ( CuaHang ) gồm các thuộc tính sau: mã số cửa hàng (msch), mã số khu vực (mskv), tên cửa hàng (tench), địa chỉ (diachi), số điện thoại (sdt), sức chứa (succhua) và còn trống (controng)
+ Trong mỗi cửa hàng sẽ ghi lại số liệu tồn của mỗi đồ ăn thú cưng; bảng tồn cửa hàng ( TonCuaHang ) gồm các thuộc tính sau: mã số cửa hàng (msch), mã số đồ ăn (msda) và số lượng tồn (soluongton).
+ Khi khách hàng đặt đồ ăn thú cưng trực tuyến, mỗi đơn đặt hàng có thể có một hoặc nhiều đồ ăn thú cưng và ngược lại một đồ ăn thú cưng có thể được đặt trong một hoặc nhiều đơn đặt hàng khác nhau Bảng đơn đặt hàng ( DonDatHang ) gồm các thuộc tính sau: mã số đơn đặt hàng (msddh), mã số nhân viên (msnv), mã số khu vực (mskv), người nhận
(nguoinhan), địa chỉ giao (diachigiao), thời hạn (thoihan), tình trạng đơn đặt hàng (tinhtrang) và ghi chú (ghichu)
+ Trong mỗi đơn đặt hàng cho biết số lượng của mỗi đồ ăn thú cưng được đặt; bảng chi tiết đơn đặt hàng ( CTDDH ) gồm các thuộc tính: mã số đơn đặt hàng (msddh), mã số đồ ăn (msda) và số lượng đặt của mỗi đồ ăn thú cưng (soluong).
+ Nhân viên làm việc tại cửa hàng thuộc khu vực đã được phân công khi được tuyển vào làm Một nhân viên có thể nhận một hoặc nhiều đơn đặt hàng và mỗi đơn đặt hàng chỉ được phụ trách bởi một nhân viên Bảng nhân viên ( NhanVien ) gồm các thuộc tính sau: mã số nhân viên (msnv), mã số khu vực (mskv), tên nhân viên (tennv), ngày sinh (ngaysinh), giới tính (gioitinh), địa chỉ (diachi) và số điện thoại (sdt).
+ Mỗi khu vực sẽ có một hoặc nhiều cửa hàng được mở tại khu vực đó Mỗi khu vực có thể có một hoặc nhiều đơn đặt hàng và sẽ có một hay nhiều nhân viên làm việc tại khu vực đó Bảng khu vực ( KhuVuc) gồm các thuộc tính sau: mã số khu vực (mskv) và tên khu vực (tenkv).
+ Khách hàng là những người sử dụng truy cập vào WebApp bán đồ ăn thú cưng và chọn các đồ ăn thú cưng phù hợp thú cưng của họ Một khách hàng có thể đặt một hoặc nhiều đơn đặt hàng và một đơn đặt hàng chỉ được đặt bởi một khách hàng Bảng khách hàng ( KhachHang ) gồm các thuộc tính sau: mã số khách hàng (mskh), tên khách hàng (tenkh), địa chỉ (diachi), số điện thoại (sdt) và điểm tích lũy mua hàng (diem).
Chú giải cách tạo bảng và nhập nhập dữ liệu vào bảng:
+ Phải tạo các bảng không có khóa ngoại trước sau đó đến các bảng có khóa phụ rồi cuối cùng tạo các bảng phụ từ quan hệ nhiều nhiều.