LAB TÌM KIẾM HÓA ĐƠN LAB 4 TÌM KIẾM HÓA ĐƠN MÔ TẢ Ứng dụng cho phép tìm kiếm các hóa đơn với điều kiện lọc phức tạp, được mô tả như sau Chọn thành phố > danh sách khách hàng thay đổi theo thành phố[.]
LAB 4: TÌM KIẾM HĨA ĐƠN MƠ TẢ Ứng dụng cho phép tìm kiếm hóa đơn với điều kiện lọc phức tạp, mô tả sau: Chọn thành phố -> danh sách khách hàng thay đổi theo thành phố chọn Chọn khách hàng -> danh sách hóa đơn thay đổi theo khách hàng chọn Chọn hóa đơn -> danh sách mặt hàng thay đổi theo hóa đơn chọn Và số lượng khách hàng, hóa đơn mặt hàng thay đổi theo MỤC TIÊU Nâng cao khả truy vấn liệu Nắm vững kỹ thuật tương tác control form vào kiện CÁC BƯỚC THỰC HIỆN Bước 1: Thiết kế giao diện Tạo UserControl (đặt tên TimKiemHoaDonUserControl) có giao diện sau Các thành phần giao diện Name Type Properties Event cboThanhPho ComboBox cboThanhPho_SelectedIndexChanged cboKhachHang ComboBox cboKhachHang_SelectedIndexChanged dgvHD DataGridView Anchor=Letf,Top,Right,Bottom dgvHD_RowEnter dgvCTHD DataGridView Anchor=Letf,Right,Bottom txtSoKH TextBox Anchor=Top,Right txtSoHD TextBox Anchor=Bottom,Right txtSoMH TextBox Anchor=Bottom,Right Các cột ô lưới hóa đơn Name Header DataPropertyName Type MaHD MÃ HD MaHD TextBoxColumn MaHK KHÁCH HÀNG MaKH ComboBoxColumn NgayLapHD NGÀY LẬP NgayLapHD TextBoxColumn NgayNhanHang NGÀY NHẬN NgayNhanHang TextBoxColumn MaNV NHÂN VIÊN MaNV ComboBoxColumn Các cột ô lưới chi tiết hóa đơn Name Header DataPropertyName Type MaHD MÃ HD MaHD TextBoxColumn MaSP SẢN PHẨM MaSP ComboBoxColumn SoLuong SỐ LƯỢNG SoLuong TextBoxColumn Bước 2: viết code xử lý Thực bước theo hướng dẫn sau để viết code cho kiện Phải chuột lên form Chọn UserControl Nhấp đúp vào kiện load Sau toàn mã C# using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace QuanLyBanHang { public partial class TimKiemHoaDonUserControl : UserControl { public TimKiemHoaDonUserControl() { InitializeComponent(); } // Tải danh sách thành phố vào cboThanhPho void LoadThanhPho() { // Xây dựng câu lệnh SELECT String sqlThanhPho = "SELECT * FROM ThanhPho ORDER BY TenThanhPho"; // Dưa liệu DataTable lên ComboBox cboThanhPho.DataSource = DataProvider.TruyVan_LayDuLieu(sqlThanhPho); cboThanhPho.DisplayMember = "TenThanhPho"; // cột dùng để hiển thị cboThanhPho.ValueMember = "ThanhPho"; // cột dùng để lập trình } // Tải danh sách khách hàng thành phố (cboThanhPho) vào cboKhachHang void LoadKhachHang() { String sqlKhachHang = "SELECT * FROM KhachHang WHERE ThanhPho=" + cboThanhPho.SelectedValue + "ORDER BY TenCty"; DataTable tableKhachHang = DataProvider.TruyVan_LayDuLieu(sqlKhachHang); cboKhachHang.DataSource = tableKhachHang; cboKhachHang.DisplayMember = "TenCty"; cboKhachHang.ValueMember = "MaKH"; DataGridViewComboBoxColumn cboMaKH = dgvHD.Columns["MaKH"] as DataGridViewComboBoxColumn; cboMaKH.DataSource = tableKhachHang; cboMaKH.DisplayMember = "TenCty"; cboMaKH.ValueMember = "MaKH"; } // Tải danh sách hóa đơn khách hàng (cboKhachHang) vào danh lưới hóa đơn (dgvHD) void LoadHoaDon() { String sqlDonHang = string.Format( "SELECT * FROM HoaDon WHERE MaKH='{0}'", cboKhachHang.SelectedValue); dgvHD.DataSource = DataProvider.TruyVan_LayDuLieu(sqlDonHang); } // Tải danh sách mặt hàng hóa đơn (dgvHD) vào lưới chi tiết hóa đơn (dgvCTHD) void LoadChiTietHoaDon() { if (dgvHD.SelectedRows.Count > 0) { String sqlChiTietDonHang = string.Format( "SELECT * FROM ChiTietHoaDon WHERE MaHD={0}" , dgvHD.SelectedRows[0].Cells[0].Value.ToString()); dgvCTHD.DataSource = DataProvider.TruyVan_LayDuLieu(sqlChiTietDonHang); txtSoKH.Text = cboKhachHang.Items.Count.ToString(); txtSoHD.Text = dgvHD.Rows.Count.ToString(); txtSoMH.Text = dgvCTHD.Rows.Count.ToString(); } } // Tải nhân viên vào ô ComboBox nhân viên DataGridView chứa hóa đơn (dgvHD) void LoadNhanVien() { String sqlNhanVien = "SELECT * FROM NhanVien ORDER BY Ten"; DataGridViewComboBoxColumn cboMaNV = dgvHD.Columns["MaNV"] as DataGridViewComboBoxColumn; cboMaNV.DataSource = DataProvider.TruyVan_LayDuLieu(sqlNhanVien); cboMaNV.ValueMember = "MaNV"; cboMaNV.DisplayMember = "Ten"; } // Tải nhân viên vào ô ComboBox sản phẩm DataGridView chứa chi tiết hóa đơn (dgvCTHD) void LoadSanPham() { String sqlSanPham = "SELECT * FROM SanPham ORDER BY TenSP"; DataGridViewComboBoxColumn cboMaSP = dgvCTHD.Columns["MaSP"] as DataGridViewComboBoxColumn; cboMaSP.DataSource = DataProvider.TruyVan_LayDuLieu(sqlSanPham); cboMaSP.ValueMember = "MaSP"; cboMaSP.DisplayMember = "TenSP"; } // Sự kiện chạy sau Form khởi động private void TimKiemHoaDonUserControl_Load(object sender, EventArgs e) { this.LoadThanhPho(); this.LoadKhachHang(); this.LoadNhanVien(); this.LoadHoaDon(); this.LoadSanPham(); this.LoadChiTietHoaDon(); // Đăng ký xử lý kiện chọn thành phố cboThanhPho.SelectedIndexChanged += new EventHandler(cboThanhPho_SelectedIndexChanged); // Đăng ký xử lý kiện chọn khách hàng cboKhachHang.SelectedIndexChanged += new EventHandler(cboKhachHang_SelectedIndexChanged); // Đăng ký xử lý kiện chọn hóa đơn dgvHD.RowEnter += new DataGridViewCellEventHandler(dgvDH_RowEnter); } // Sự kiện xảy bấm chọn hàng DataGridView chứa danh sách hóa đơn void dgvDH_RowEnter(object sender, DataGridViewCellEventArgs e) { this.LoadChiTietHoaDon(); // Tải lại chi tiết hóa đơn } // Sự kiện xảy chọn mục ComboBox chứa danh sách khách hàng void cboKhachHang_SelectedIndexChanged(object sender, EventArgs e) { this.LoadHoaDon(); // Tải lại d/s hóa đơn } // Sự kiện xảy chọn mục ComboBox chứa danh sách thành phố void cboThanhPho_SelectedIndexChanged(object sender, EventArgs e) { this.LoadKhachHang(); // tải lại d/s khách hàng } } } Bước 3: Sử dụng TimKiemHoaDonUserControl Tạo form kéo TimKiemHoaDonUserControl từ cơng cụ Đặt thuộc tính Dock=Fill cho user control để điền đầy khơng gian form Bước 4: Chạy kiểm tra kết Chỉnh sửa form khởi động Program.cs để chạy thử form chương trình ... cboMaKH.DisplayMember = "TenCty"; cboMaKH.ValueMember = "MaKH"; } // Tải danh sách hóa đơn khách hàng (cboKhachHang) vào danh lưới hóa đơn (dgvHD) void LoadHoaDon() { String sqlDonHang = string.Format( "SELECT... dgvHD.DataSource = DataProvider.TruyVan_LayDuLieu(sqlDonHang); } // Tải danh sách mặt hàng hóa đơn (dgvHD) vào lưới chi tiết hóa đơn (dgvCTHD) void LoadChiTietHoaDon() { if (dgvHD.SelectedRows.Count > 0) {... // Đăng ký xử lý kiện chọn hóa đơn dgvHD.RowEnter += new DataGridViewCellEventHandler(dgvDH_RowEnter); } // Sự kiện xảy bấm chọn hàng DataGridView chứa danh sách hóa đơn void dgvDH_RowEnter(object