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ố[.]
Trang 1LAB 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ố được chọn
Chọn khách hàng -> danh sách hóa đơn thay đổi theo khách hàng được chọn
Chọn hóa đơn -> danh sách các mặt hàng thay đổi theo hóa đơn được chọn Và số lượng khách hàng, hóa đơn và mặt hàng cũng được thay đổi theo
Trang 2MỤC TIÊU
Nâng cao khả năng truy vấn dữ liệu
Nắm vững kỹ thuật tương tác giữa các control trên form dữ vào các sự kiện
CÁC BƯỚC THỰC HIỆN
Bước 1: Thiết kế giao diện
Tạo 1 UserControl (đặt tên là TimKiemHoaDonUserControl) có giao diện như sau
Trang 3 Các thành phần giao diện
Trang 4txtSoMH TextBox Anchor=Bottom,Right
Các cột trên ô lưới hóa đơn
Các cột trên ô lưới chi tiết hóa đơn
Bước 2: viết code xử lý
Thực hiện các bước theo hướng dẫn sau để viết code cho sự kiện
Trang 5 Sau đây là toàn bộ 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()
Phải chuột lên form
Chọn UserControl
Nhấp đúp vào sự kiện load
Trang 6{
// Xây dựng câu lệnh SELECT
String sqlThanhPho = "SELECT * FROM ThanhPho ORDER BY TenThanhPho";
// Dưa dữ liệu trong 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 của 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 của 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 các mặt hàng của hóa đơn (dgvHD) vào ô lưới chi tiết hóa đơn (dgvCTHD)
void LoadChiTietHoaDon()
{
Trang 7if (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 trong 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 trong 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 khi Form khởi động
private void TimKiemHoaDonUserControl_Load(object sender, EventArgs e)
{
this.LoadThanhPho();
Trang 8this.LoadKhachHang();
this.LoadNhanVien();
this.LoadHoaDon();
this.LoadSanPham();
this.LoadChiTietHoaDon();
// Đăng ký xử lý sự kiện khi chọn thành phố
cboThanhPho.SelectedIndexChanged += new EventHandler(cboThanhPho_SelectedIndexChanged); // Đăng ký xử lý sự kiện khi chọn khách hàng
cboKhachHang.SelectedIndexChanged += new EventHandler(cboKhachHang_SelectedIndexChanged); // Đăng ký xử lý sự kiện khi chọn hóa đơn
dgvHD.RowEnter += new DataGridViewCellEventHandler(dgvDH_RowEnter);
}
// Sự kiện xảy ra khi bấm chọn hàng trên 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 ra khi chọn mục trên 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 ra khi chọn mục trên 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 và kéo TimKiemHoaDonUserControl từ thanh công cụ
Trang 9Đặt thuộc tính Dock=Fill cho user control để nó điền đầy không gian form
Bước 4: Chạy và kiểm tra kết quả
Chỉnh sửa form khởi động trong Program.cs để chạy thử form chương trình