Hướng dẫn viết app điều khiển xe trên windown form

Ở các bài viết trước mình đã hướng dẫn các bạn làm quen với windows forms app, cũng như các thuộc tính, các control trong windows forms app. Thì bài viết hôm nay mình sẽ làm một bài ứng dụng, để tạo ra một chương trình tính toán đơn giản.

Các bạn có thể tham khảo thêm một số bài viết trước: Tại đây

Giao diện chương trình

Dưới đây là giao diện của chương trình:

Hướng dẫn viết app điều khiển xe trên windown form

Thuật toán và thiết kế

Thuật toán: Khi click vào một trong bốn phép tính từ chương trình sẽ lấy dữ liệu ở textbox 1 và textbox 2 thực hiện tính toán theo đúng phép tính và hiện kết quả ở ô kết quả.

Thiết kế: Ở ô số 1 và số 2 cho phép bạn nhập hai số cần tính tính toán, mình sử dụng các ô textbox để nhập dữ liệu.

Ở phần phép tính sử dụng các radioButton để cho phép người dùng chọn phép tính cần thực hiện, và chỉ được chọn một lựa chọn trong một lần tính toán. khi click vào thì phép tính được tính và hiện kết quả trên ô Kết quả.

Đầu tiên các bạn cần tạo giao diện và đặt tên các control như hình. Các control được sử dụng và đặt tên: – lable (Số 1, số 2) : lbl1 và lbl2 – Textbox (Ô nhập dữ liệu và hiển thị kết quả) : txtSo1, txtSo2, txtKetqua – RadioButton (Phép tính) : rdoCong, rdoTru, rdoNhan, rdoChia

Một số xử lý chương trình khi chạy:

Xử lý thuộc tính enabled cho kết quả: – Như các bạn đã biết, Text Box cho phép chúng ta nhập dữ liệu vào, và có thể hiển thị dữ liệu lên luôn. Ở ô kết quả các bạn chỉ dùng để hiển thị kết quả chứ không cho phép nhập, vì vậy khi chương trình bắt đầu chạy, thì chúng ta vô hiệu hóa chức năng nhập vào ô kết quả luôn. Để bắt sự kiện load form các bạn chỉ cần nháy đúp chuột vào một chỗ trống bất kì trên giao diện:

Hướng dẫn viết app điều khiển xe trên windown form

Sau khi đã enabled ô kết quả thì khi chạy chương trình, ô textbox sẽ bị làm mờ và không nhập dữ liệu được:

Hướng dẫn viết app điều khiển xe trên windown form

Xử lý nhập chữ vào textbox – Tiếp theo chính là xử lý nhập chữ trong ô textbox, thì các ô textbox có thể nhập cả chữ, nếu vậy thì khi tính toán chương trình sẽ xuất hiện lỗi, thì chúng ta cần bắt sự kiện KeyPress cho các ô textbox để chỉ cho phép người dùng nhập số vào hai ô này:

Các bạn chọn vào ô TextBox và chọn Event trong hộp thoại Properties, tìm sự kiện KeyPress và click vào:

Hướng dẫn viết app điều khiển xe trên windown form

Viết code:

Hướng dẫn viết app điều khiển xe trên windown form

Char.IsDigit(e.KeyChar) –> kiểm tra xem phím vừa nhập vào textbox có phải là ký tự số hay không, hàm này trả về kiểu bool Char.IsContro(e.KeyChar) –> kiểm tra xem phím vừa nhập vào textbox có phải là các ký tự điều khiển (các phím mũi tên,Delete,Insert,backspace,space bar) hay không, mục đích dùng hàm này là để cho phép người dùng xóa số trong trường hợp nhập sai.

Viết chức năng tính toán

Các bạn tạo một biến toàn cục để sử dụng lấy kết quả:

Hướng dẫn viết app điều khiển xe trên windown form

Viết sự kiện thay đổi khi chúng ta click chuột vào RadioButton, các bạn chỉ cần click đúp chuột vào nút radio ở trên giao diện thiết kế, chương trình sẽ tự động tạo ra hàm code để các bạn viết chức năng:

Hướng dẫn viết app điều khiển xe trên windown form

Các phép tính sau các bạn làm tương tự, chỉ cần thay đổi phép tính.

Hướng dẫn viết app điều khiển xe trên windown form

Riêng phép chia các bạn phải xử lí thêm chia cho 0 (zero) nữa nha :

Hướng dẫn viết app điều khiển xe trên windown form

Như vậy là mình đã hướng dẫn cho các bạn xong viết ra một chương trình tính toán đơn giản, hay thử và demo để xem kết quả của mình nào =))

Hướng dẫn viết app điều khiển xe trên windown form

Trong quá trình thực hiện nếu bạn nào không hiểu, hoặc xảy ra lỗi, hoặc thắc mắc gì, mọi người có thể để lại comment bên dưới, mình sẽ giải đáp sớm nhất có thể trong khả năng của mình :>>

Cảm ơn các bạn đã đọc bài viết này, mọi đóng góp hay thắc mắc mọi người vui lòng để lại comment bên dưới, mình sẽ phản hồi sớm nhất có thể. Chúc các bạn thành công.

Với sự ra đời của .Net và Visual Studio của Microsoft, việc xây dựng một chương trình quản lý với cơ sở dữ liệu đã đơn giản hơn rất nhiều. Bài này hướng dẫn bạn cách tạo ứng dụng quản lý bán hàng lưu niệm sử dụng ngôn ngữ lập trình C# và hệ quản trị cơ sở dữ liệu SQL Server. Tham khảo thêm khoá học đầy đủ lập trình .NET và khoá thành thạo với lập trình C#.

1. Yêu cầu

Xây dựng chương trình quản lý cửa hàng Bán hàng lưu niệm sử dụng ngôn ngữ C# và hệ quản trị cơ sở dữ liệu SQL Server. Hệ thống có các chức năng cơ bản như quản lý mặt hàng, quản lý khách hàng, quản lý hoá đơn bán. Cửa hàng có thể có một hoặc nhiều người bán, với mỗi hoá đơn bán hàng phải có thông tin của người bán cho khách hàng cụ thể.

2. Thiết kế cơ sở dữ liệu

a) Tạo ứng dụng mới

– Tên project: QuanLyBanHang

b) Tạo cơ sở dữ liệu

– Trong cửa sổ Solution Explorer, nháy phải chuột lên tên ứng dụng, chọn Add ->New Item… Chọn Data -> Service-based Database (hoặc SQL Database trong Visual Studio Net 2005).

– Đặt tên cơ sở dữ liệu: Quanlybanhang.mdf

Hướng dẫn viết app điều khiển xe trên windown form

– Tạo các bảng: Trong cửa sổ Server Explorer, chọn cơ sở dữ liệu, nháy phải lên Tables, chọn Add New Table…

Bảng tblChatLieu (chất liệu)

Hướng dẫn viết app điều khiển xe trên windown form
Bảng tblKhach (khách)

Hướng dẫn viết app điều khiển xe trên windown form

Bảng tblHang (hàng)

Hướng dẫn viết app điều khiển xe trên windown form

Bảng tblNhanVien (nhân viên)

Hướng dẫn viết app điều khiển xe trên windown form

Bảng tblHDBan (hoá đơn bán)

Hướng dẫn viết app điều khiển xe trên windown form

Bảng tblChiTietHDBan (chi tiết hoá đơn bán)

Hướng dẫn viết app điều khiển xe trên windown form

Quan hệ giữa các bảng (Relationship)

Hướng dẫn viết app điều khiển xe trên windown form

Một số chú ý

– Để cho phép người dùng sửa đổi thông tin của các bảng, thực hiện như sau:

Vào Tools -> Options, chọn Database Tools ->Table and Database Designers, bỏ dấu chọn ở mục Prevent saving changes that require table re-creation.

– Xoá liên kết tới bản sao cơ sở dữ liệu: trong cửa sổ Solution Explorer, nháy phải lên file dữ liệu (Quanlybanhang.mdf), chọn Exclude From Project

– Thực hiện kết nối dữ liệu:

Trong Server Explorer, nháy phải Data Connections, chọn Add Connection, chọn Microsoft SQL Server Database File, nhấn Continue. Trong hộp thoại Add Connection, nhấn Browse tìm file dữ liệu (Quanlybanhang.mdf) (tìm đến thư mục Project của bạn). Nhấn Test Connection, nếu thành công sẽ xuất hiện thông báo “Test connection succeeded”.

– Nên tạo thư mục chứa ảnh: nháy phải lên tên project QuanLyBanHang, chọn Add, chọn New Folder, đặt tên thư mục là Images. Nháy phải lên thư mục Images, chọn Add, chọn Existing Item và duyệt chọn các file ảnh, nhấn Add để thêm vào thư mục Images.

Xem video hướng dẫn

3. Thiết kế giao diện

a) Form chính

– Tên form: frmMain

Hướng dẫn viết app điều khiển xe trên windown form

Các thành phần của menu

Name Text mnuFile Tập tin mnuThoat Thoát mnuDanhMuc Danh mục mnuChatLieu Chất liệu mnuNhanVien Nhân viên mnuKhachHang Khách hàng mnuHangHoa Hàng hoá mnuHoaDon Hoá đơn mnuHoaDonBan Hoá đơn bán mnuTimKiem Tìm kiếm mnuFindHoaDon Hoá đơn mnuFindHang Hàng mnuFindKhachHang Khách hàng mnuBaoCao Báo cáo mnuBCHangTon Hàng tồn mnuBCDoanhThu Doanh thu mnuTroGiup Trợ giúp mnuHienTroGiup Trợ giúp mnuVaiNet Vài nét

Xem Video hướng dẫn

b) Form Danh mục chất liệu

Tên form: frmDMChatLieu

Hướng dẫn viết app điều khiển xe trên windown form

Các thành phần trên form:

Điều khiển Name Text TextBox txtMaChatLieu txtTenChatLieu Button btnThem Thêm btnXoa Xoá btnSua Sửa btnLuu Lưu btnBoqua Bỏ qua btnDong Đóng DataGridView dgvChatLieu

Xem Video hướng dẫn

c) Form Danh mục nhân viên

Tên form: frmDMNhanvien

Hướng dẫn viết app điều khiển xe trên windown form

Các thành phần trên form:

Điều khiển Name Text TextBox txtMaNhanVien txtTenNhanVien txtDiaChi Button btnThem, btnXoa, btnSua, btnLuu, btnBoQua, btnDong CheckBox chkGioiTinh Nam MaskedTextBox mtbDienThoai Mask: Phone Number mskNgaySinh Mask: Short Date DataGridView dgvNhanVien

Xem Video hướng dẫn

d) Form Danh mục Khách Hàng

Tên form: frmDMKhachHang

Hướng dẫn viết app điều khiển xe trên windown form

Các thành phần trên form:

Điều khiển Name Text TextBox txtMaKhach txtTenKhach txtDiaChi Button btnThem, btnXoa, btnSua, btnLuu, btnBoQua, btnDong MaskedTextBox mtbDienThoai Mask: Phone Number DataGridView dgvKhachHang

Xem Video hướng dẫn

e) Form Danh mục hàng hoá

Tên form: frmDMHang

Hướng dẫn viết app điều khiển xe trên windown form

Các thành phần trên form

Điều khiển Name TextBox txtMaHang, txtTenHang, txtSoLuong, txtDonGiaNhap, txtDonGiaBan, txtAnh, txtGhiChu ComboBox cboMaChatLieu PictureBox picAnh (thuộc tính SizeMode = Zoom) DataGridView dgvHang Button btnThem, btnXoa, btnSua, btnLuu, btnBoQua, btnTimKiem, btnHienThi, btnDong, btnOpen

Xem Video hướng dẫn

f) Form Hoá đơn bán hàng

Tên form: frmHoaDonBan

Hướng dẫn viết app điều khiển xe trên windown form

Các thành phần trên form

Điều khiển Name Text Label lblBangChu Bằng chữ: TextBox txtMaHDBan, txtNgayBan, txtTenNhanVien,txtTenKhach, txtDiaChi, txtDienThoai, txtTongTien, txtTenHang, txtDonGiaBan, txtSoLuong, txtGiamGia, txtThanhTien. ComboBox cboMaNhanVien, cboMaKhach, cboMaHang, cboMaHDBan. DataGridView dgvHDBanHang Button btnNgay, btnThem, btnLuu, btnXoa, btnInHoaDon, btnDong, btnTimKiem

Xem Video hướng dẫn

g) Form Tìm kiếm hoá đơn

Tên form: frmTimHDBan

Hướng dẫn viết app điều khiển xe trên windown form

Các thành phần trên form

Điều khiển Name TextBox txtMaHDBan, txtThang, txtNam, txtMaNhanVien, txtMaKhach, txtTongTien. DataGridView dgvTKHoaDon Button btnTimKiem, btnTimLai, btnDong

Xem Video hướng dẫn

Chú ý:

– Tất cả các form (trừ frmMain), thuộc tính StartPostion = CenterParent, ShowInTaskbar = False

4. Xử lý sự kiện

4.1. Lớp Functions

– Chứa các phương thức dùng chung

– Trong khung Solution Explorer, nháy phải lên tên project, chọn Add -> New Folder, đặt tên thư mục là Class

– Nháy phải thư mục Class, nháy phải chọn Add -> Class, đặt tên Functions.cs

– Trong class Functions:

+ Khai báo bổ sung các thư viện:

  
using System.Data;  
using System.Data.SqlClient;  
using System.Windows.Forms;     // Sử dụng đối tượng MessageBox

+ Viết 2 phương thức: Connect() và Disconnect()

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

4.2. Form frmMain

a) Sự kiện frmMain_Load

  
private void frmMain_Load(object sender, EventArgs e)  
        {  
            Class.Functions.Connect(); //Mở kết nối  
        }

b) Sự kiện mnuThoat_Click

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

c) Hiển thị các form khác

Cú pháp:

<Tên lớp form> <Tên đối tượng> = new <Tên lớp form>(); //Khởi tạo đối tượng

<Tên đối tượng>.ShowDialog(); //Hiển thị dưới dạng hộp thoại

Hoặc <Tên đối tượng>.Show(); //Hiện thị dạng thông thường

+ Hiển thị form frmChatLieu

  
private void mnuChatLieu_Click(object sender, EventArgs e)  
        {  
            frmDMChatLieu frmChatLieu = new frmDMChatLieu(); //Khởi tạo đối tượng  
            frmChatLieu.ShowDialog(); //Hiển thị  
        }

4.3. Form Chất liệu

a) Khai báo

– Khai báo

  
using System.Data.SqlClient; //Sử dụng thư viện để làm việc SQL server  
using QuanLyBanHang.Class; //Sử dụng class Functions.cs

– Khai báo biến toàn cục

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

b) Sự kiện frmDMChatLieu_Load

  
private void frmDMChatLieu_Load(object sender, EventArgs e)  
        {  
            txtMaChatLieu.Enabled = false;  
            btnLuu.Enabled = false;  
            btnBoQua.Enabled = false;  
            LoadDataGridView(); //Hiển thị bảng tblChatLieu  
        }

Trong đó, phương thức LoadDataGridView có tác dụng lấy dữ liệu từ bảng tblChatLieu đổ vào DataGridView

c) Phương thức LoadDataGridView

  
private void LoadDataGridView()  
        {  
            string sql;  
            sql = "SELECT MaChatLieu, TenChatLieu FROM tblChatLieu";  
            tblCL = Class.Functions.GetDataToTable(sql); //Đọc dữ liệu từ bảng  
            dgvChatLieu.DataSource = tblCL; //Nguồn dữ liệu              
            dgvChatLieu.Columns[0].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[1].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[0].Width = 100;  
            dgvChatLieu.Columns[1].Width = 300;  
            dgvChatLieu.AllowUserToAddRows = false; //Không cho người dùng thêm dữ liệu trực tiếp  
            dgvChatLieu.EditMode = DataGridViewEditMode.EditProgrammatically; //Không cho sửa dữ liệu trực tiếp  
        }

Với GetDataToTable được viết trong lớp Functions có tác dụng thực hiện câu lệnh SQL truy vấn dữ liệu từ CSDL đổ vào đối tượng bảng.

d) Phương thức GetDataToTable

Mở cửa sổ lớp Class Functions viết mã lệnh như sau:

  
//Lấy dữ liệu vào bảng  
        public static DataTable GetDataToTable(string sql)  
        {  
            SqlDataAdapter dap = new SqlDataAdapter(); //Định nghĩa đối tượng thuộc lớp SqlDataAdapter  
            //Tạo đối tượng thuộc lớp SqlCommand  
            dap.SelectCommand = new SqlCommand();  
            dap.SelectCommand.Connection = Functions.Con; //Kết nối cơ sở dữ liệu  
            dap.SelectCommand.CommandText = sql; //Lệnh SQL  
            //Khai báo đối tượng table thuộc lớp DataTable  
            DataTable table = new DataTable();  
            dap.Fill(table);  
            return table;  
        }

Hoặc có thể thực hiện ngắn gọn bằng cách gán tham số khi khai báo đối tượng như sau:

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

0

Xem Video hướng dẫn

e) Phương thức dgvChatLieu_Click

Phương thức này có tác dụng lấy nội dung dòng dữ liệu người dùng chọn trong lưới DataGridView và hiển thị lên các điều khiển trên Form.

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

1

f) Phương thức btnThem_Click

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

2

Với ResetValues là phương thức của form frmDMChatLieu có tác dụng xóa hết dữ liệu trong các điều khiển trên Form.

g) Phương thức ResetValues

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

3

h) Phương thức btnLuu_Click

Phương thức này có tác dụng kiểm tra thông tin người dùng nhập vào các điều khiển trên Form trong trường hợp thêm mới và lưu các thông tin đó vào CSDL.

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

4

Với CheckKey và RunSQL là các phương thức được viết trong lớp Functions.

CheckKey có tác dụng kiểm tra khóa trùng, RunSQL có tác dụng thực thi các câu lệnh SQL.

i) Hàm CheckKey

Mở cửa sổ lớp Class Functions viết mã lệnh:

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

5

j) Phương thức RunSQL

Mở cửa sổ lớp Class Functions viết mã lệnh như sau:

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

6

Chú ý: Đối tượng SqlCommand có hai phương thức để thực thi câu lệnh SQL, trong đó:

  • ExecuteReader: thực thi câu lệnh SQL có dữ liệu trả về, ví dụ SELECT.
  • ExecuteNoneQuery: thực thi các câu lệnh SQL không yêu cầu trả về tập dữ liệu, ví dụ: INSERT, UPDATE, DELETE.

k) Phương thức btnSua_Click

Khi người dùng nháy chuột vào một dòng bản ghi bất kỳ trên lưới để hiển thị dữ liệu của bản ghi đó lên Form thì người dùng có thể chỉnh sửa các thông tin đó.

Phương thức btnSua_Click có tác dụng lưu các thông tin người dùng đã sửa vào CSDL.

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

7

l) Phương thức btnXoa_Click

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

8

m) Phương thức RunSQLDel

Phương thức RunSQLDel tương tự như RunSQL nhưng trong trường hợp xóa dữ liệu nếu dữ liệu đang được dùng bởi một đối tượng khác thì không được phép xóa.

Mở cửa sổ lớp Class Functions viết mã lệnh như sau:

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

9

n) Phương thức btnBoQua_Click

Phương thức này được gọi khi người dùng muốn hủy bỏ các chức năng Thêm mới hoặc Sửa dữ liệu.

  
private void frmMain_Load(object sender, EventArgs e)  
        {  
            Class.Functions.Connect(); //Mở kết nối  
        }

0

o) Phương thức dùng phím Enter thay cho phím Tab

  
private void frmMain_Load(object sender, EventArgs e)  
        {  
            Class.Functions.Connect(); //Mở kết nối  
        }

1

Thực hiện tương tự cho txtTenChatLieu_KeyUp

  1. Phương thức btnDong_Click

  
private void frmMain_Load(object sender, EventArgs e)  
        {  
            Class.Functions.Connect(); //Mở kết nối  
        }

2

Xem video hướng dẫn phần trên

4.4. Form Danh mục Nhân viên

a) Khai báo

– Thư viện:

  
private void frmMain_Load(object sender, EventArgs e)  
        {  
            Class.Functions.Connect(); //Mở kết nối  
        }

3

– Biến:

  
private void frmMain_Load(object sender, EventArgs e)  
        {  
            Class.Functions.Connect(); //Mở kết nối  
        }

4

b) Phương thức frmDMNhanvien_Load

  
private void frmMain_Load(object sender, EventArgs e)  
        {  
            Class.Functions.Connect(); //Mở kết nối  
        }

5

c) Phương thức LoadDataGridView – Hiển thị dữ liệu lên lưới

  
private void frmMain_Load(object sender, EventArgs e)  
        {  
            Class.Functions.Connect(); //Mở kết nối  
        }

6

d) Phương thức dgvNhanVien_Click

  
private void frmMain_Load(object sender, EventArgs e)  
        {  
            Class.Functions.Connect(); //Mở kết nối  
        }

7

e) Phương thức btnThem_Click

  
private void frmMain_Load(object sender, EventArgs e)  
        {  
            Class.Functions.Connect(); //Mở kết nối  
        }

8

f) Phương thức ResetValues

  
private void frmMain_Load(object sender, EventArgs e)  
        {  
            Class.Functions.Connect(); //Mở kết nối  
        }

9

g) Phương thức btnLuu_Click

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

0

Với IsDate và ConvertDateTime là các hàm được viết trong lớp Functions

IsDate có tác dụng kiểm tra một biến có ở dạng ngày tháng không, ConvertDateTime có tác dụng đổi một chuỗi ngày tháng do người dùng nhập có dạng dd/mm/yyyy thành chuỗi ngày tháng có dạng mm/dd/yyyy để lưu vào CSDL.

h) Hàm IsDate

Soạn thảo trong lớp Functions:

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

1

i) Hàm ConvertDateTime

Soạn thảo hàm trong lớp Functions:

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

2

j) Phương thức btnSua_Click

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

3

k) Phương thức btnXoa_Click

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

4

l) Phương thức btnBoQua_Click

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

5

  1. Phương thức dùng phím Enter thay cho phím Tab

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

6

Thực hiện tương tự cho txtTenNhanVien.KeyUp, txtDiaChi.KeyUp, mtbDienThoai.KeyUp, mskNgaySinh.KeyUp.

n) Phương thức btnDong_Click

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

7

Xem video hướng dẫn chi tiết

4.5. Form Danh mục Khách hàng

a) Khai báo

– Thư viện

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

8

– Biến

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

9

b) Phương thức frmDMKhachHang_Load

  
private void mnuChatLieu_Click(object sender, EventArgs e)  
        {  
            frmDMChatLieu frmChatLieu = new frmDMChatLieu(); //Khởi tạo đối tượng  
            frmChatLieu.ShowDialog(); //Hiển thị  
        }

0

c) Phương thức LoadDataGridView

  
private void mnuChatLieu_Click(object sender, EventArgs e)  
        {  
            frmDMChatLieu frmChatLieu = new frmDMChatLieu(); //Khởi tạo đối tượng  
            frmChatLieu.ShowDialog(); //Hiển thị  
        }

1

d) Phương thức dgvKhachHang_Click

  
private void mnuChatLieu_Click(object sender, EventArgs e)  
        {  
            frmDMChatLieu frmChatLieu = new frmDMChatLieu(); //Khởi tạo đối tượng  
            frmChatLieu.ShowDialog(); //Hiển thị  
        }

2

e) Phương thức btnThem_Click

  
private void mnuChatLieu_Click(object sender, EventArgs e)  
        {  
            frmDMChatLieu frmChatLieu = new frmDMChatLieu(); //Khởi tạo đối tượng  
            frmChatLieu.ShowDialog(); //Hiển thị  
        }

3

f) Phương thức ResetValues

  
private void mnuChatLieu_Click(object sender, EventArgs e)  
        {  
            frmDMChatLieu frmChatLieu = new frmDMChatLieu(); //Khởi tạo đối tượng  
            frmChatLieu.ShowDialog(); //Hiển thị  
        }

4

g) Phương thức btnLuu_Click

  
private void mnuChatLieu_Click(object sender, EventArgs e)  
        {  
            frmDMChatLieu frmChatLieu = new frmDMChatLieu(); //Khởi tạo đối tượng  
            frmChatLieu.ShowDialog(); //Hiển thị  
        }

5

h) Phương thức btnSua_Click

  
private void mnuChatLieu_Click(object sender, EventArgs e)  
        {  
            frmDMChatLieu frmChatLieu = new frmDMChatLieu(); //Khởi tạo đối tượng  
            frmChatLieu.ShowDialog(); //Hiển thị  
        }

6

i) Phương thức btnXoa_Click

  
private void mnuChatLieu_Click(object sender, EventArgs e)  
        {  
            frmDMChatLieu frmChatLieu = new frmDMChatLieu(); //Khởi tạo đối tượng  
            frmChatLieu.ShowDialog(); //Hiển thị  
        }

7

j) Phương thức btnBoQua_Click

  
private void mnuChatLieu_Click(object sender, EventArgs e)  
        {  
            frmDMChatLieu frmChatLieu = new frmDMChatLieu(); //Khởi tạo đối tượng  
            frmChatLieu.ShowDialog(); //Hiển thị  
        }

8

k) Phương thức dùng phím Enter thay cho phím Tab

  
private void mnuChatLieu_Click(object sender, EventArgs e)  
        {  
            frmDMChatLieu frmChatLieu = new frmDMChatLieu(); //Khởi tạo đối tượng  
            frmChatLieu.ShowDialog(); //Hiển thị  
        }

9

  1. Phương thức btnDong_Click

  
using System.Data.SqlClient; //Sử dụng thư viện để làm việc SQL server  
using QuanLyBanHang.Class; //Sử dụng class Functions.cs

0

Xem video hướng dẫn Quản lý Khách Hàng

4.6. Form Danh mục Hàng hóa

a) Khai báo

– Thư viện

  
private void mnuThoat_Click(object sender, EventArgs e)  
        {  
            Class.Functions.Disconnect(); //Đóng kết nối  
            Application.Exit(); //Thoát  
        }

8

– Biến

  
using System.Data.SqlClient; //Sử dụng thư viện để làm việc SQL server  
using QuanLyBanHang.Class; //Sử dụng class Functions.cs

2

b) Phương thức frmDMHang_Load

  
using System.Data.SqlClient; //Sử dụng thư viện để làm việc SQL server  
using QuanLyBanHang.Class; //Sử dụng class Functions.cs

3

Với FillCombo là một phương thức được viết trong Class Functions, có tác dụng lấy dữ liệu từ một câu lệnh SQL đổ vào một ComboBox.

c) Phương thức FillCombo

Soạn thảo trong Class Functions :

  
using System.Data.SqlClient; //Sử dụng thư viện để làm việc SQL server  
using QuanLyBanHang.Class; //Sử dụng class Functions.cs

4

d) Phương thức ResetValues

  
using System.Data.SqlClient; //Sử dụng thư viện để làm việc SQL server  
using QuanLyBanHang.Class; //Sử dụng class Functions.cs

5

e) Phương thức LoadDataGridView

  
using System.Data.SqlClient; //Sử dụng thư viện để làm việc SQL server  
using QuanLyBanHang.Class; //Sử dụng class Functions.cs

6

f) Phương thức dgvHang_Click

  
using System.Data.SqlClient; //Sử dụng thư viện để làm việc SQL server  
using QuanLyBanHang.Class; //Sử dụng class Functions.cs

7

Với GetFieldValues là một hàm được viết trong Class Functions, có tác dụng lấy dữ liệu từ một câu lệnh SQL.

  1. Hàm GetFieldValues Soạn thảo trong Class Functions

  
using System.Data.SqlClient; //Sử dụng thư viện để làm việc SQL server  
using QuanLyBanHang.Class; //Sử dụng class Functions.cs

8

h) Phương thức btnThem_Click

  
using System.Data.SqlClient; //Sử dụng thư viện để làm việc SQL server  
using QuanLyBanHang.Class; //Sử dụng class Functions.cs

9

i) Phương thức btnLuu_Click

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

0

j) Phương thức btnSua_Click

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

1

k) Phương thức btnXoa_Click

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

2

l) Phương thức btnBoQua_Click

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

3

m) Phương thức btnOpen_Click

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

4

n) Phương thức btnTimKiem_Click

Phương thức tìm kiếm cho phép tìm các bản ghi thỏa mãn một số điều kiện nào đấy và hiển thị kết quả tìm được vào lưới DataGridView.

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

5

o) Phương thức btnHienThi_Click

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

6

  1. Phương thức btnDong_Click

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

7

Xem Video hướng dẫn Quản lý Hàng Hoá

4.7. Form Hóa đơn bán

a) Khai báo

Chọn menu Project/Add Reference, chọn thẻ COM hộp thoại Add Reference, chọn Microsoft Excel 14.0 Object Library, nhấn OK.

Hướng dẫn viết app điều khiển xe trên windown form

– Thư viện

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

8

– Biến

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

9

b) Phương thức frmHoaDonBan_Load

  
private void frmDMChatLieu_Load(object sender, EventArgs e)  
        {  
            txtMaChatLieu.Enabled = false;  
            btnLuu.Enabled = false;  
            btnBoQua.Enabled = false;  
            LoadDataGridView(); //Hiển thị bảng tblChatLieu  
        }

0

c) Phương thức LoadDataGridView

  
private void frmDMChatLieu_Load(object sender, EventArgs e)  
        {  
            txtMaChatLieu.Enabled = false;  
            btnLuu.Enabled = false;  
            btnBoQua.Enabled = false;  
            LoadDataGridView(); //Hiển thị bảng tblChatLieu  
        }

1

d) Phương thức LoadInfoHoaDon()

  
private void frmDMChatLieu_Load(object sender, EventArgs e)  
        {  
            txtMaChatLieu.Enabled = false;  
            btnLuu.Enabled = false;  
            btnBoQua.Enabled = false;  
            LoadDataGridView(); //Hiển thị bảng tblChatLieu  
        }

2

e) Phương thức btnThem_Click

  
private void frmDMChatLieu_Load(object sender, EventArgs e)  
        {  
            txtMaChatLieu.Enabled = false;  
            btnLuu.Enabled = false;  
            btnBoQua.Enabled = false;  
            LoadDataGridView(); //Hiển thị bảng tblChatLieu  
        }

3

Với CreateKey là một hàm được viết trong Class Functions, có tác dụng sinh khóa tự động cho Mã hóa đơn bán.

f) Hàm CreateKey

Soạn thảo trong Class Functions:

  
private void frmDMChatLieu_Load(object sender, EventArgs e)  
        {  
            txtMaChatLieu.Enabled = false;  
            btnLuu.Enabled = false;  
            btnBoQua.Enabled = false;  
            LoadDataGridView(); //Hiển thị bảng tblChatLieu  
        }

4

Với ConvertTimeTo24 là một hàm toàn cục được viết trong Class Functions, có tác dụng chuyển đổi giờ từ dạng PM sang dạng 24h.

g) Hàm ConvertTimeTo24

Soạn thảo trong Class Functions:

  
private void frmDMChatLieu_Load(object sender, EventArgs e)  
        {  
            txtMaChatLieu.Enabled = false;  
            btnLuu.Enabled = false;  
            btnBoQua.Enabled = false;  
            LoadDataGridView(); //Hiển thị bảng tblChatLieu  
        }

5

h) Phương thức ResetValues

  
private void frmDMChatLieu_Load(object sender, EventArgs e)  
        {  
            txtMaChatLieu.Enabled = false;  
            btnLuu.Enabled = false;  
            btnBoQua.Enabled = false;  
            LoadDataGridView(); //Hiển thị bảng tblChatLieu  
        }

6

i) Phương thức btnLuu_Click

  
private void frmDMChatLieu_Load(object sender, EventArgs e)  
        {  
            txtMaChatLieu.Enabled = false;  
            btnLuu.Enabled = false;  
            btnBoQua.Enabled = false;  
            LoadDataGridView(); //Hiển thị bảng tblChatLieu  
        }

7

Với ChuyenSoSangChu là một hàm toàn cục được viết trong Class Functions, có tác dụng đọc từ dạng số sang dạng chữ.

j) Hàm ChuyenSoSangChu

Soạn thảo trong Class Functions:

  
private void frmDMChatLieu_Load(object sender, EventArgs e)  
        {  
            txtMaChatLieu.Enabled = false;  
            btnLuu.Enabled = false;  
            btnBoQua.Enabled = false;  
            LoadDataGridView(); //Hiển thị bảng tblChatLieu  
        }

8

k) Phương thức ResetValuesHang

  
private void frmDMChatLieu_Load(object sender, EventArgs e)  
        {  
            txtMaChatLieu.Enabled = false;  
            btnLuu.Enabled = false;  
            btnBoQua.Enabled = false;  
            LoadDataGridView(); //Hiển thị bảng tblChatLieu  
        }

9

l) Phương thức dgvHDBanHang_DoubleClick

Phương thức này cho phép người dùng nháy đúp chuột vào một mặt hàng trong lưới để xóa.

  
private void LoadDataGridView()  
        {  
            string sql;  
            sql = "SELECT MaChatLieu, TenChatLieu FROM tblChatLieu";  
            tblCL = Class.Functions.GetDataToTable(sql); //Đọc dữ liệu từ bảng  
            dgvChatLieu.DataSource = tblCL; //Nguồn dữ liệu              
            dgvChatLieu.Columns[0].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[1].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[0].Width = 100;  
            dgvChatLieu.Columns[1].Width = 300;  
            dgvChatLieu.AllowUserToAddRows = false; //Không cho người dùng thêm dữ liệu trực tiếp  
            dgvChatLieu.EditMode = DataGridViewEditMode.EditProgrammatically; //Không cho sửa dữ liệu trực tiếp  
        }

0

m) Phương thức btnXoa_Click

Phương thức này cho phép xóa toàn bộ thông tin của một hóa đơn

  
private void LoadDataGridView()  
        {  
            string sql;  
            sql = "SELECT MaChatLieu, TenChatLieu FROM tblChatLieu";  
            tblCL = Class.Functions.GetDataToTable(sql); //Đọc dữ liệu từ bảng  
            dgvChatLieu.DataSource = tblCL; //Nguồn dữ liệu              
            dgvChatLieu.Columns[0].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[1].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[0].Width = 100;  
            dgvChatLieu.Columns[1].Width = 300;  
            dgvChatLieu.AllowUserToAddRows = false; //Không cho người dùng thêm dữ liệu trực tiếp  
            dgvChatLieu.EditMode = DataGridViewEditMode.EditProgrammatically; //Không cho sửa dữ liệu trực tiếp  
        }

1

n) Phương thức cboMaNhanVien_TextChanged

  
private void LoadDataGridView()  
        {  
            string sql;  
            sql = "SELECT MaChatLieu, TenChatLieu FROM tblChatLieu";  
            tblCL = Class.Functions.GetDataToTable(sql); //Đọc dữ liệu từ bảng  
            dgvChatLieu.DataSource = tblCL; //Nguồn dữ liệu              
            dgvChatLieu.Columns[0].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[1].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[0].Width = 100;  
            dgvChatLieu.Columns[1].Width = 300;  
            dgvChatLieu.AllowUserToAddRows = false; //Không cho người dùng thêm dữ liệu trực tiếp  
            dgvChatLieu.EditMode = DataGridViewEditMode.EditProgrammatically; //Không cho sửa dữ liệu trực tiếp  
        }

2

o) Phương thức cboMaKhach_TextChanged

  
private void LoadDataGridView()  
        {  
            string sql;  
            sql = "SELECT MaChatLieu, TenChatLieu FROM tblChatLieu";  
            tblCL = Class.Functions.GetDataToTable(sql); //Đọc dữ liệu từ bảng  
            dgvChatLieu.DataSource = tblCL; //Nguồn dữ liệu              
            dgvChatLieu.Columns[0].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[1].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[0].Width = 100;  
            dgvChatLieu.Columns[1].Width = 300;  
            dgvChatLieu.AllowUserToAddRows = false; //Không cho người dùng thêm dữ liệu trực tiếp  
            dgvChatLieu.EditMode = DataGridViewEditMode.EditProgrammatically; //Không cho sửa dữ liệu trực tiếp  
        }

3

p) Phương thức cboMaHang_TextChanged

  
private void LoadDataGridView()  
        {  
            string sql;  
            sql = "SELECT MaChatLieu, TenChatLieu FROM tblChatLieu";  
            tblCL = Class.Functions.GetDataToTable(sql); //Đọc dữ liệu từ bảng  
            dgvChatLieu.DataSource = tblCL; //Nguồn dữ liệu              
            dgvChatLieu.Columns[0].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[1].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[0].Width = 100;  
            dgvChatLieu.Columns[1].Width = 300;  
            dgvChatLieu.AllowUserToAddRows = false; //Không cho người dùng thêm dữ liệu trực tiếp  
            dgvChatLieu.EditMode = DataGridViewEditMode.EditProgrammatically; //Không cho sửa dữ liệu trực tiếp  
        }

4

q) Phương thức txtSoLuong_TextChanged

  
private void LoadDataGridView()  
        {  
            string sql;  
            sql = "SELECT MaChatLieu, TenChatLieu FROM tblChatLieu";  
            tblCL = Class.Functions.GetDataToTable(sql); //Đọc dữ liệu từ bảng  
            dgvChatLieu.DataSource = tblCL; //Nguồn dữ liệu              
            dgvChatLieu.Columns[0].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[1].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[0].Width = 100;  
            dgvChatLieu.Columns[1].Width = 300;  
            dgvChatLieu.AllowUserToAddRows = false; //Không cho người dùng thêm dữ liệu trực tiếp  
            dgvChatLieu.EditMode = DataGridViewEditMode.EditProgrammatically; //Không cho sửa dữ liệu trực tiếp  
        }

5

r) Phương thức txtGiamGia_TextChanged

  
private void LoadDataGridView()  
        {  
            string sql;  
            sql = "SELECT MaChatLieu, TenChatLieu FROM tblChatLieu";  
            tblCL = Class.Functions.GetDataToTable(sql); //Đọc dữ liệu từ bảng  
            dgvChatLieu.DataSource = tblCL; //Nguồn dữ liệu              
            dgvChatLieu.Columns[0].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[1].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[0].Width = 100;  
            dgvChatLieu.Columns[1].Width = 300;  
            dgvChatLieu.AllowUserToAddRows = false; //Không cho người dùng thêm dữ liệu trực tiếp  
            dgvChatLieu.EditMode = DataGridViewEditMode.EditProgrammatically; //Không cho sửa dữ liệu trực tiếp  
        }

6

s) Phương thức btnInHoaDon_Click

  
private void LoadDataGridView()  
        {  
            string sql;  
            sql = "SELECT MaChatLieu, TenChatLieu FROM tblChatLieu";  
            tblCL = Class.Functions.GetDataToTable(sql); //Đọc dữ liệu từ bảng  
            dgvChatLieu.DataSource = tblCL; //Nguồn dữ liệu              
            dgvChatLieu.Columns[0].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[1].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[0].Width = 100;  
            dgvChatLieu.Columns[1].Width = 300;  
            dgvChatLieu.AllowUserToAddRows = false; //Không cho người dùng thêm dữ liệu trực tiếp  
            dgvChatLieu.EditMode = DataGridViewEditMode.EditProgrammatically; //Không cho sửa dữ liệu trực tiếp  
        }

7

Kết quả ta có tệp Excel như sau:

Hướng dẫn viết app điều khiển xe trên windown form

t) Phương thức btnTimKiem_Click

  
private void LoadDataGridView()  
        {  
            string sql;  
            sql = "SELECT MaChatLieu, TenChatLieu FROM tblChatLieu";  
            tblCL = Class.Functions.GetDataToTable(sql); //Đọc dữ liệu từ bảng  
            dgvChatLieu.DataSource = tblCL; //Nguồn dữ liệu              
            dgvChatLieu.Columns[0].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[1].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[0].Width = 100;  
            dgvChatLieu.Columns[1].Width = 300;  
            dgvChatLieu.AllowUserToAddRows = false; //Không cho người dùng thêm dữ liệu trực tiếp  
            dgvChatLieu.EditMode = DataGridViewEditMode.EditProgrammatically; //Không cho sửa dữ liệu trực tiếp  
        }

8

u) Phương thức txtSoLuong_KeyPress

  
private void LoadDataGridView()  
        {  
            string sql;  
            sql = "SELECT MaChatLieu, TenChatLieu FROM tblChatLieu";  
            tblCL = Class.Functions.GetDataToTable(sql); //Đọc dữ liệu từ bảng  
            dgvChatLieu.DataSource = tblCL; //Nguồn dữ liệu              
            dgvChatLieu.Columns[0].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[1].HeaderText = "Mã chất liệu";  
            dgvChatLieu.Columns[0].Width = 100;  
            dgvChatLieu.Columns[1].Width = 300;  
            dgvChatLieu.AllowUserToAddRows = false; //Không cho người dùng thêm dữ liệu trực tiếp  
            dgvChatLieu.EditMode = DataGridViewEditMode.EditProgrammatically; //Không cho sửa dữ liệu trực tiếp  
        }

9

Thực hiện tương tự cho txtGiamGia_KeyPress.

v) Phương thức cboMaHDBan_DropDown

Phương thức này cập nhật lại danh sách các mã hóa đơn bán và lưu vào cboMaHDBan mỗi khi người dùng nháy chuột vào nút xổ xuống của cbo.

  
//Lấy dữ liệu vào bảng  
        public static DataTable GetDataToTable(string sql)  
        {  
            SqlDataAdapter dap = new SqlDataAdapter(); //Định nghĩa đối tượng thuộc lớp SqlDataAdapter  
            //Tạo đối tượng thuộc lớp SqlCommand  
            dap.SelectCommand = new SqlCommand();  
            dap.SelectCommand.Connection = Functions.Con; //Kết nối cơ sở dữ liệu  
            dap.SelectCommand.CommandText = sql; //Lệnh SQL  
            //Khai báo đối tượng table thuộc lớp DataTable  
            DataTable table = new DataTable();  
            dap.Fill(table);  
            return table;  
        }

0

  1. Phương thức frmHoadonBan_FormClosing

  
//Lấy dữ liệu vào bảng  
        public static DataTable GetDataToTable(string sql)  
        {  
            SqlDataAdapter dap = new SqlDataAdapter(); //Định nghĩa đối tượng thuộc lớp SqlDataAdapter  
            //Tạo đối tượng thuộc lớp SqlCommand  
            dap.SelectCommand = new SqlCommand();  
            dap.SelectCommand.Connection = Functions.Con; //Kết nối cơ sở dữ liệu  
            dap.SelectCommand.CommandText = sql; //Lệnh SQL  
            //Khai báo đối tượng table thuộc lớp DataTable  
            DataTable table = new DataTable();  
            dap.Fill(table);  
            return table;  
        }

1

  1. Phương thức btnDong_Click

  
DataTable tblCL; //Chứa dữ liệu bảng Chất liệu  

7

Xem Video hướng dẫn Quản lý Hoá Đơn

4.8. Form tìm kiếm Hóa đơn bán

a) Khai báo

– Thư viện

  
//Lấy dữ liệu vào bảng  
        public static DataTable GetDataToTable(string sql)  
        {  
            SqlDataAdapter dap = new SqlDataAdapter(); //Định nghĩa đối tượng thuộc lớp SqlDataAdapter  
            //Tạo đối tượng thuộc lớp SqlCommand  
            dap.SelectCommand = new SqlCommand();  
            dap.SelectCommand.Connection = Functions.Con; //Kết nối cơ sở dữ liệu  
            dap.SelectCommand.CommandText = sql; //Lệnh SQL  
            //Khai báo đối tượng table thuộc lớp DataTable  
            DataTable table = new DataTable();  
            dap.Fill(table);  
            return table;  
        }

3

– Biến

  
//Lấy dữ liệu vào bảng  
        public static DataTable GetDataToTable(string sql)  
        {  
            SqlDataAdapter dap = new SqlDataAdapter(); //Định nghĩa đối tượng thuộc lớp SqlDataAdapter  
            //Tạo đối tượng thuộc lớp SqlCommand  
            dap.SelectCommand = new SqlCommand();  
            dap.SelectCommand.Connection = Functions.Con; //Kết nối cơ sở dữ liệu  
            dap.SelectCommand.CommandText = sql; //Lệnh SQL  
            //Khai báo đối tượng table thuộc lớp DataTable  
            DataTable table = new DataTable();  
            dap.Fill(table);  
            return table;  
        }

4

b) Phương thức frmTimHDBan_Load

  
//Lấy dữ liệu vào bảng  
        public static DataTable GetDataToTable(string sql)  
        {  
            SqlDataAdapter dap = new SqlDataAdapter(); //Định nghĩa đối tượng thuộc lớp SqlDataAdapter  
            //Tạo đối tượng thuộc lớp SqlCommand  
            dap.SelectCommand = new SqlCommand();  
            dap.SelectCommand.Connection = Functions.Con; //Kết nối cơ sở dữ liệu  
            dap.SelectCommand.CommandText = sql; //Lệnh SQL  
            //Khai báo đối tượng table thuộc lớp DataTable  
            DataTable table = new DataTable();  
            dap.Fill(table);  
            return table;  
        }

5

c) Phương thức ResetValues

  
//Lấy dữ liệu vào bảng  
        public static DataTable GetDataToTable(string sql)  
        {  
            SqlDataAdapter dap = new SqlDataAdapter(); //Định nghĩa đối tượng thuộc lớp SqlDataAdapter  
            //Tạo đối tượng thuộc lớp SqlCommand  
            dap.SelectCommand = new SqlCommand();  
            dap.SelectCommand.Connection = Functions.Con; //Kết nối cơ sở dữ liệu  
            dap.SelectCommand.CommandText = sql; //Lệnh SQL  
            //Khai báo đối tượng table thuộc lớp DataTable  
            DataTable table = new DataTable();  
            dap.Fill(table);  
            return table;  
        }

6

d) Phương thức btnTimKiem_Click

  
//Lấy dữ liệu vào bảng  
        public static DataTable GetDataToTable(string sql)  
        {  
            SqlDataAdapter dap = new SqlDataAdapter(); //Định nghĩa đối tượng thuộc lớp SqlDataAdapter  
            //Tạo đối tượng thuộc lớp SqlCommand  
            dap.SelectCommand = new SqlCommand();  
            dap.SelectCommand.Connection = Functions.Con; //Kết nối cơ sở dữ liệu  
            dap.SelectCommand.CommandText = sql; //Lệnh SQL  
            //Khai báo đối tượng table thuộc lớp DataTable  
            DataTable table = new DataTable();  
            dap.Fill(table);  
            return table;  
        }

7

e) Phương thức LoadDataGridView

  
//Lấy dữ liệu vào bảng  
        public static DataTable GetDataToTable(string sql)  
        {  
            SqlDataAdapter dap = new SqlDataAdapter(); //Định nghĩa đối tượng thuộc lớp SqlDataAdapter  
            //Tạo đối tượng thuộc lớp SqlCommand  
            dap.SelectCommand = new SqlCommand();  
            dap.SelectCommand.Connection = Functions.Con; //Kết nối cơ sở dữ liệu  
            dap.SelectCommand.CommandText = sql; //Lệnh SQL  
            //Khai báo đối tượng table thuộc lớp DataTable  
            DataTable table = new DataTable();  
            dap.Fill(table);  
            return table;  
        }

8

f) Phương thức btnTimLai_Click

  
//Lấy dữ liệu vào bảng  
        public static DataTable GetDataToTable(string sql)  
        {  
            SqlDataAdapter dap = new SqlDataAdapter(); //Định nghĩa đối tượng thuộc lớp SqlDataAdapter  
            //Tạo đối tượng thuộc lớp SqlCommand  
            dap.SelectCommand = new SqlCommand();  
            dap.SelectCommand.Connection = Functions.Con; //Kết nối cơ sở dữ liệu  
            dap.SelectCommand.CommandText = sql; //Lệnh SQL  
            //Khai báo đối tượng table thuộc lớp DataTable  
            DataTable table = new DataTable();  
            dap.Fill(table);  
            return table;  
        }

9

g) Phương thức txtTongTien_KeyPress

  
namespace QuanLyBanHang.Class  
{  
    class Functions  
    {  
        public static SqlConnection Con;  //Khai báo đối tượng kết nối        
        public static void Connect()  
        {  
            Con = new SqlConnection();   //Khởi tạo đối tượng  
            Con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\Quanlybanhang.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";  
            Con.Open();                  //Mở kết nối  
            //Kiểm tra kết nối  
            if (Con.State == ConnectionState.Open)  
                MessageBox.Show("Kết nối thành công");  
            else MessageBox.Show("Không thể kết nối với dữ liệu");
        }  
        public static void Disconnect()  
        {  
            if (Con.State == ConnectionState.Open)  
            {  
                Con.Close();     //Đóng kết nối  
                Con.Dispose();   //Giải phóng tài nguyên  
                Con = null;  
            }  
        }  
}

00

h) Phương thức dgvTKHoaDon_DoubleClick

Phương thức này cho phép người dùng nháy đúp chuột chọn một hóa đơn trên lưới, rồi gọi và hiển thị thông tin của hóa đơn đó lên form frmHoadonBan.

Chú ý: Thay đổi phạm vi truy cập của điều khiển txtMaHDBan thành Public trong form frmHoadonBan (trong file frmHoadonBan.Designer.cs)