LẬP TRÌNH CƠ SỞ DỮ LIỆU Lập trình cơ sở dữ liệu là một trong những thế mạnh của C# cho phép dễ dàng tạo ra những phần mềm quản lý chuyên nghiệp, được kết nối tới cơ sở dữ liệu của các hệ quản trị cơ sở dữ liệu cho phép Thêm, Sửa, Xoá, Tìm kiếm và kết xuất dữ liệu với độ chính xác cao, chức năng phong phú và giao diện thân thiện. Trong phần này ta sẽ viết chương trình minh họa việc lập trình cơ sở dữ liệu trong C#. Các bước thực hiện như sau: 1. Giới thiệu bài toán Viết chương trình quản lý cửa hàng Bán hàng lưu niệm, cho phép cập nhập các mặt hàng, viết hoá đơn nhập xuất, tìm kiếm các thông tin, báo cáo tình hình doanh thu… 2. Tạo cơ sở dữ liệu Vào Microsoft Visual Studio 2010 tạo dự án mới có tên là Quanlybanhang và lưu vào thư mục D:\TenSV. Trong dự án ta tạo một số thư mục để lưu các nhóm đối tượng khác nhau. Trước hết ta tạo thư mục Database để lưu CSDL của dự án. Trong cửa sổ Solution Explorer kích chuột phải tại tên dự án, chọn Add, chọn New Folder.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
LẬP TRÌNH CƠ SỞ DỮ LIỆU
Lập trình cơ sở dữ liệu là một trong những thế mạnh của C# cho phép dễ dàng tạo ra những phần mềm quản lý chuyên nghiệp, được kết nối tới cơ sở dữ liệu của các hệ quản trị cơ sở dữ liệu cho phép Thêm, Sửa, Xoá, Tìm kiếm và kết xuất dữ liệu với độ chính xác cao, chức năng phong phú và giao diện thân thiện.
Trong phần này ta sẽ viết chương trình minh họa việc lập trình cơ sở dữ liệu trong C#. Các bước thực hiện như sau:
1. Giới thiệu bài toán
Viết chương trình quản lý cửa hàng Bán hàng lưu niệm, cho phép cập nhập các mặt hàng, viết hoá đơn nhập xuất, tìm kiếm các thông tin, báo cáo tình hình doanh thu…
2. Tạo cơ sở dữ liệu
Vào Microsoft Visual Studio 2010 tạo dự án mới có tên là Quanlybanhang và lưu vào thư mục D:\TenSV. Trong dự án ta tạo một số thư mục để lưu các nhóm đối tượng khác nhau.
Trước hết ta tạo thư mục Database để lưu CSDL của dự án. Trong cửa sổ Solution Explorer kích chuột phải tại tên dự án, chọn Add, chọn New Folder.
Hình 1. Giao diện tạo thư mục mới
Tại cửa sổ Solution Explorer xuất hiện thư mục New Folder1, ta đổi tên thành Database.
Kích chuột phải tại thư mục Database, chọn Add, chọn New Item… hoặc kích chuột chọn thư mục Database rồi vào menu Project chọn Add New Item…
Xuất hiện cửa sổ Add New Item:
Hình 2. Giao diện tạo Database
Chọn Service-based Database (chọn SQL Database nếu là bản Visual Studio Net 2005), tại ô Name đặt tên cho cơ sở dữ liệu là Dulieu.mdf rồi bấm nút Add.
Kết quả xuất hiện hộp hội thoại Data Source Configuration Wizrad:
Hình 3. Data Source Configuration Wizrad bản 2010
Chọn Cancel để tạo một Database mới.
(Đối với bản 2005 chọn 4 kiểu thao tác CSDL như hình sau rồi chọn Finish
Hình 4. Data Source Configuration Wizrad bản 2005)
Kết quả trong thư mục Database xuất hiện đối tượng Dulieu.mdf, kích đúp vào đối tượng này xuất hiện cửa sổ Server Explorer cho phép tạo cơ sở dữ liệu cho dự án.
Hình 5. Giao diện cửa sổ Server Explorer
2.1. Tạo bảng tblChatlieu
Kích chuột phải tại Tables, chọn Add New Table xuất hiện một cửa sổ cho phép tạo một bảng mới. Tạo bảng chất liệu gồm các trường như sau:
Hình 6. Tạo bảng tblChatlieu
Để tạo khóa cho bảng ta kích chuột phải tại dòng Machatlieu chọn Set Primary Key.
Bấm Ctrl+S, trong hộp thoại Choose Name, đặt tên cho bảng là tblChatlieu rồi bấm OK.
2.2. Tạo bảng tblHang
2.3. Tạo bảng tblNhanvien
2.4. Tạo bảng tblKhach
2.5. Tạo bảng tblHDBan
2.6. Tạo bảng tblChitietHDBan
2.7. Tạo quan hệ Relationship
Kích chuột phải tại Database Diagrams chọn Add New Diagram và tạo Relationship như hình dưới đây:
Hình 7. Quan hệ Relationship
2.8. Tạo kết nối cơ sở dữ liệu
Để cập nhật dữ liệu vào các bảng trong CSDL Dulieu.mdf ta thực hiện theo các bước sau:
Bước 1: Xoá bản sao cơ sở dữ liệu Dulieu.mdf trong cửa sổ Solution Explorer. Kích chuột phải tại thư mục Database chọn Exclude From Project (chú ý phải lưu đồ án trước khi thực hiện bước này)
Hình 8. Xoá bản sao cơ sở dữ liệu
Bước 2: Kết nối tới cơ sở dữ liệu Dulieu.mdf trong thư mục D:\TenSV\Quanlybanhang\ Quanlybanhang\Database.
Trong cửa sổ Server Explorer kích chuột phải tại Data Connections chọn Add Connection… xuất hiện hộp thoại Choose Data Source
Trong hộp thoại Choose Data Source chọn Microsoft SQL Server Database File, chọn Continue. Xuất hiện hộp thoại Add Connection:
Hình 9. Kết nối cơ sở dữ liệu Dulieu.mdf
Kích chọn nút Browse, tìm và kích đúp tại tệp Dulieu.mdf (tại D:\TenSV\Quanlybanhang\ Quanlybanhang\Database). Kích chọn nút Test Connection, nếu thành công sẽ xuất hiện hộp thoại sau:
Kích chọn OK/OK. Kết quả tệp dữ liệu Dulieu.mdf đã được kết nối.
3. Tạo thư mục chứa ảnh
Chương trình phải quản lý rất nhiều tệp ảnh như ảnh nền của Form, ảnh minh họa của các mặt hàng… do đó ta tạo một thư mục Images để chứa danh sách các tệp ảnh này. Trong cửa sổ Solution Explorer kích chuột phải tại tên dự án Quanlybanhang, chọn Add, chọn New Folder, đổi tên thư mục mới xuất hiện thành Images.
Kích chuột phải tại thư mục Images, chọn Add, chọn Existing Item… xuất hiện cửa sổ Add Existing Item, tìm đường dẫn đến các tệp ảnh của chương trình và chọn nút Add để lưu các tệp ảnh đó vào thư mục Images.
4. Xây dựng Form chính cho chương trình
4.1. Tạo giao diện Form chính
Sửa lại một số thuộc tính của Form1 như sau:
Name frmMain
Text Quan ly ban hang
WindowState Maximized
Icon /Images/Users.ico
BackgroundImage /Images/bg0_4.jpg
Tạo menu cho chương trình gồm các mục menu với thuộc tính Name và Text như sau:
Danh mục mnuDanhmucChất liệu mnuChatlieuNhân viên mnuNhanvienKhách hàng mnuKhachhangHàng hóa mnuHanghoa
Hóa đơn mnuHoadonHóa đơn bán mnuHoadonban
Tìm kiếm mnuTimkiemHóa đơn mnuFindHoadonHàng mnuFindHangKhách hàng mnuFindKhachhang
Thêm 2 nhãn Label với Text là: ‘Chương trình quản lý’ và ‘Bán hàng lưu niệm’
Hình 10. Giao diện form chính
4.2. Viết mã lệnh Form chính
Form frmMain có nhiệm vụ kết nối tới cơ sở dữ liệu khi bắt đầu thực hiện dự án, đóng kết nối tới cơ sở dữ liệu khi đóng dự án và mở các form tương ứng với các mục menu.
public partial class frmMain : Form { public frmMain() { InitializeComponent(); } private void frmMain_Load(object sender, EventArgs e) { Class.Functions.Connect(); } private void mnuThoat_Click(object sender, EventArgs e) { Class.Functions.Disconnect(); Application.Exit(); }
private void mnuChatlieu_Click(object sender, EventArgs e) { Forms.frmDMChatlieu f = new Forms.frmDMChatlieu(); f.StartPosition = FormStartPosition.CenterScreen; f.Show(); } }
Trong đó Connect và Disconnect là hai hàm toàn cục được viết trong class Funtions, có tác dụng tạo kết nối và đóng kết nối tới CSDL.
Các hàm viết trong class sẽ được truy xuất bởi tất cả các đối tượng có trong dự án.
4.3. Tạo lớp – Class Functions
Trong cửa sổ Solution Explorer tạo một thư mục mới đặt tên là Class, kích chuột phải tại Class chọn Add/ New Item… chọn Class trong hộp thoại Add New Item và đặt tên cho class là Functions.cs tại ô Name.
Mã lệnh của lớp Functions được viết như sau:
Để sử dụng thư viện các đối tượng của SQL Server và sử dụng đối tượng Dataset ta phải khai báo 2 Namespace Data và Data.SqlClient.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using System.Windows.Forms; // Sử� dụng hàm MessageBox
namespace Quanlybanhang.Class{ class Functions { public static SqlConnection Conn; //Khai báo đố8i tượng kế8t nố8i public static string connString; //Khai báo biế8n chứa chuố=i kế8t nố8i
public static void Connect() { //Thiế8t lập giá trị cho chuố=i kế8t nố8i connString = "Data Source=.\\SQLEXPRESS; AttachDbFilename= D:\\Baigiang\\
Để xác định giá trị cho chuỗi kết nối, trong cửa sổ Server Explorer kích chọn tệp dữ liệu Dulieu.mdf, chuỗi kết nối là giá trị của thuộc tính Connection String trong cửa sổ Properties.
5. Xây dựng Form cập nhật danh mục Chất liệu
Trong cửa sổ Solution Explorer tạo một thư mục mới đặt tên là Forms, kích chuột phải tại Forms, chọn Add, chọn New Item… Trong cửa sổ Add New Item chọn WindowForms và đặt tên cho Form tại ô Name là frmDMChatlieu rồi bấm Add.
Form frmDMChatlieu cho phép thêm, xem, xoá, sửa danh sách các loại chất liệu trong bảng tblChatlieu.
Với Load_DataGridView là thủ tục cục bộ được viết trong phần code của form frmDM Chatlieu có tác dụng lấy dữ liệu từ bảng tblChatlieu đổ vào lưới DataGrid View.
Với GetDataToTable là hàm toàn cục đượ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 trong C#.
5.2.4. Viết hàm GetDataToTable
Mở cửa sổ lớp Class Functions viết mã lệnh như sau:
public static DataTable GetDataToTable(string sql) { SqlDataAdapter Mydata = new SqlDataAdapter(); // Khai báo // Tạo đố8i tượng Command thưc hiện cấu lệnh SELECT Mydata.SelectCommand = new SqlCommand(); Mydata.SelectCommand.Connection = Functions.Conn; // Kế8t nố8i CSDL Mydata.SelectCommand.CommandText = sql; // Gán cấu lệnh SELECT DataTable table = new DataTable(); // Khai báo DataTable nhận dữ liệu traO vế^ Mydata.Fill(table); //Thưc hiện cấu lệnh SELECT và đốO dữ liệu vào baOng 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:
public static DataTable GetDataToTable(string sql) { SqlDataAdapter Mydata = new SqlDataAdapter(sql, Functions.Conn); DataTable table = new DataTable(); Mydata.Fill(table); return table; }
5.2.5. Tìm hiểu đối tượng SqlDataAdapter
SqlDataAdapter là đối tượng dùng để điều phối dữ liệu, tức là nó không lưu trữ dữ liệu mà chỉ phát đi các lệnh SQL và nhận dữ liệu trả về của CSDL sau đó chuyển cho đối tượng khác (thường là DataTable).
Đối tượng SqlDataAdapter nằm trong thư viện System.Data.SqlClient.
SqlDataAdapter có thể thực hiện cùng một lúc các lệnh SQL gồm: SELECT, INSERT, UPDATE, DELETE thông qua các thành phần cơ bản sau:
SelectCommand: truy vấn dữ liệu, tương ứng với lệnh SELECT trong SQL.
InsertCommand: chèn dữ liệu mới, tương ứng với lệnh INSERT.
UpdateCommand: cập nhật dữ liệu, tương ứng với lệnh UPDATE.
DeleteCommand: xóa dữ liệu, tương ứng với lệnh DELETE.
SqlDataAdapter có 2 phương thức cơ bản Fill() và Update():
Fill: thực thi câu lệnh SelectCommand và đổ dữ liệu vào đối tượng DataTable.
Update: thực thi các câu lệnh InsertCommand, UpdateCommand, DeleteCommand.
5.2.6. Viết thủ tục DataGridView_Click
Thủ tục này có tác dụng lấy nội dung dòng dữ liệu người dùng kích chọn trong lưới DataGridView và hiển thị lên các điều khiển trên Form.
private void DataGridView_Click(object sender, EventArgs e) { if (btnThem.Enabled == false) { MessageBox.Show("Đang ởO chế8 độ thếm mơi!", "Thống báo",
MessageBoxButtons.OK, MessageBoxIcon.Information); txtMachatlieu.Focus(); return; } if (tblCL.Rows.Count == 0 ) { MessageBox.Show("Khống có dữ liệu!", "Thống báo", MessageBoxButtons.OK,
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.
5.2.12. Viết thủ tục btnSua_Click
Khi người dùng kích 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 đó.
Thủ tục btnSua_Click có tác dụng lưu các thông tin người dùng đã sửa vào CSDL.
Với IsDate và ConvertDateTime là các hàm toàn cục đượ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.
6.2.8. Viết hàm IsDate
Mở cửa sổ code của lớp Functions và gõ vào đoạn mã lệnh như sau:
public static bool IsDate(string d) { string[] parts = d.Split('/'); if ((Convert.ToInt32(parts[0]) >= 1) && (Convert.ToInt32(parts[0]) <= 31) &&
Với GetFieldValues là một hàm toàn cụ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.
8.2.7. Viết hàm GetFieldValues
Mở cửa sổ lớp Class Functions viết mã lệnh như sau:
public static string GetFieldValues(string sql) { string ma = ""; SqlCommand cmd = new SqlCommand(sql, Functions.Conn); SqlDataReader reader ;
reader = cmd.ExecuteReader(); while (reader.Read()) { ma = reader.GetValue(0).ToString(); } reader.Close(); return ma; }
8.2.8. Tìm hiểu đối tượng SqlDataReader
SqlCommand thực thi câu lệnh Sql SELECT và trả về tập dữ liệu SqlDataReader. Dữ liệu trong SqlDataReader được lưu trữ dưới dạng các dòng và các cột, ta chỉ có thể duyệt dữ liệu theo một chiều từ đầu đến cuối.
Để đọc từng dòng dữ liệu trong SqlDataReader ta sử dụng phương thức Read với cú pháp như sau:
reader.Read();
SqlDataReader không cung cấp cách thức cho phép kiểm soát số bản ghi đang nắm giữ mà quy định phương thức Read() trả về giá trị True nếu vẫn tồn tại bản ghi kế tiếp. Do đó để duyệt qua danh sách tất cả các bản ghi ta có thể sử dụng vòng lặp while.
Để đọc dữ liệu của từng cột ta sử dụng phương thức GetValue với cú pháp như sau:
reader.GetValue(FieldIndex);
với FieldIndex là số thứ tự của cột muốn lấy dữ liệu (bắt đầu từ 0). Ngoài ra nếu biết rõ kiểu dữ liệu của cột cần lấy dữ liệu ta có thể sử dụng các phương thức gọi tường minh như: GetString(), GetInt32()… khi đó tốc độ đọc sẽ nhanh hơn.
Ghichu FROM tblHang"; tblH = Functions.GetDataToTable(sql); DataGridView.DataSource = tblH; }
9. Xây dựng Form cập nhật Hóa đơn bán
Mở một Form mới đặt tên là frmHoadonBan và lưu vào thư mục Forms.
Form frmHoadonBan cho phép thêm, xem, xoá danh sách các hóa đơn và các mặt hàng có trong bảng tblHDBan và tblChitietHDBan.
Hình 15. Giao diện form Hoá đơn bán
Ngoài ra form này cho phép chúng ta kết xuất các thông tin trong hóa đơn ra một tệp Excel thông qua nút lệnh In hóa đơn. Để làm được điều này ta phải tham chiếu tới đối tượng COM của Excel do Microsoft Visual Studio cung cấp. COM là một đối tượng đóng gói theo 1 chuẩn do Microsoft Visual Studio định ra và nó có khả năng chạy được trên nhiều nền tảng ứng dụng khác nhau.
9.1. Tham chiếu thư viện Microsoft.Office.Interop.Excel
Vào menu Project/Add Reference… xuất hiện hộp hội thoại Add Reference.
Chọn tab COM, kích chọn Microsoft Excel 14.0 Object Library rồi chọn OK.
"Mahang","Tenhang"); cboMahang.SelectedIndex = -1; //HiếOn thị thống tin cuOa một hóa đởn được gọi từ form tìm kiế8m if (txtMaHDBan.Text != "") { Load_ThongtinHD(); btnXoaHD.Enabled = true; btnInhoadon.Enabled = true; } Load_DataGridViewChitiet(); }
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.
9.3.7. Viết hàm ConvertTimeTo24
Mở cửa sổ lớp Class Functions viết mã lệnh như sau:
public static string ConvertTimeTo24(string hour) { string h = ""; switch (hour) { case "1": h = "13"; break; case "2": h = "14"; break; case "3": h = "15"; break; case "4": h = "16"; break; case "5": h = "17"; break; case "6": h = "18"; break; case "7": h = "19";
break; case "8": h = "20"; break; case "9": h = "21"; break; case "10": h = "22"; break; case "11": h = "23"; break; case "12": h = "0"; break; } return h; }
private void btnLuu_Click(object sender, EventArgs e) { string sql; double sl, SLcon, tong, Tongmoi; sql = "SELECT MaHDBan FROM tblHDBan WHERE MaHDBan=N'" + txtMaHDBan.Text + "'"; if( ! Functions.CheckKey(sql) ) { // Mã hóa đởn chưa có, tiế8n hành lưu các thống tin chung // Mã HDBan được sinh tư động do đó khống có trường hợp trùng khóa if( txtNgayban.Text.Length == 0 ) { MessageBox.Show("Bạn phaOi nhập ngày bán", "Thống báo",
} // KiếOm tra xem số8 lượng hàng trong kho còn đuO đếO cung cấ8p khống? sl = Convert.ToDouble(Functions.GetFieldValues("SELECT Soluong FROM tblHang
WHERE Mahang = N'" + cboMahang.SelectedValue + "'")); if( Convert.ToDouble(txtSoluong.Text) > sl ) { MessageBox.Show("Số8 lượng mặt hàng này chỉO còn " + sl, "Thống báo",
Functions.RunSql(sql); Load_DataGridViewChitiet(); // Cập nhật lại số8 lượng cuOa mặt hàng vào baOng tblHang SLcon = sl - Convert.ToDouble(txtSoluong.Text); sql = "UPDATE tblHang SET Soluong =" + SLcon + " WHERE Mahang= N'" +
cboMahang.SelectedValue + "'"; Functions.RunSql(sql); // Cập nhật lại tốOng tiến cho hóa đởn bán tong = Convert.ToDouble(Functions.GetFieldValues("SELECT Tongtien FROM tblHDBan
WHERE MaHDBan = N'" + txtMaHDBan.Text + "'")); Tongmoi = tong + Convert.ToDouble(txtThanhtien.Text); sql = "UPDATE tblHDBan SET Tongtien =" + Tongmoi + " WHERE MaHDBan = N'" +
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)) { //Xóa hàng và cập nhật lại số8 lượng hàng mahang = DataGridViewChitiet.CurrentRow.Cells["Mahang"].Value.ToString(); DelHang(txtMaHDBan.Text, mahang); // Cập nhật lại tốOng tiến cho hóa đởn bán Thanhtien = Convert.ToDouble(DataGridViewChitiet.CurrentRow.
AND MaHang=N'" + Mahang + "'"; s = Convert.ToDouble(Functions.GetFieldValues(sql)); sql = "DELETE tblChitietHDBan WHERE MaHDBan=N'" + Mahoadon + "' AND Mahang = N'"
+ Mahang + "'"; Functions.RunSqlDel(sql); // Cập nhật lại số8 lượng cho các mặt hàng sql = "SELECT Soluong FROM tblHang WHERE Mahang = N'" + Mahang + "'"; sl = Convert.ToDouble(Functions.GetFieldValues(sql)); SLcon = sl + s; sql = "UPDATE tblHang SET Soluong =" +Slcon + " WHERE Mahang= N'" +Mahang + "'"; Functions.RunSql(sql); }
Thủ tục này cho phép xóa toàn bộ thông tin của một hóa đơn
private void btnXoaHD_Click(object sender, EventArgs e) { if (MessageBox.Show("Bạn có chắ8c chắ8n muố8n xóa khống?", "Thống báo",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { string[] Mahang = new string[20]; string sql; int n = 0; int i; sql = "SELECT Mahang FROM tblChitietHDBan WHERE MaHDBan = N'" +
while (reader.Read()) { Mahang[n] = reader.GetString(0).ToString(); n = n + 1; } reader.Close(); //Xóa danh sách các mặt hàng cuOa hóa đởn for (i = 0 ; i <= n - 1; i++) DelHang(txtMaHDBan.Text, Mahang[i]); //Xóa hóa đởn sql = "DELETE tblHDBan WHERE MaHDBan=N'" + txtMaHDBan.Text + "'"; Functions.RunSqlDel(sql); ResetValues(); Load_DataGridViewChitiet(); btnXoaHD.Enabled = false; btnInhoadon.Enabled = false; } }
9.3.16.Viết thủ tục cboManhanvien_TextChanged
private void cboManhanvien_TextChanged(object sender, EventArgs e) { string str; if (cboManhanvien.Text == "") txtTennhanvien.Text = ""; // Khi kich chon Ma nhan vien thi ten nhan vien se tu dong hien ra str = "Select Tennhanvien from tblNhanvien where Manhanvien =N'" +
private void cboMahang_TextChanged(object sender, EventArgs e) { string str; if (cboMahang.Text == "") { txtTenhang.Text = ""; txtDongiaban.Text = ""; } // Khi kich chon Ma hang thi ten hang va gia ban se tu dong hien ra str = "SELECT Tenhang FROM tblHang WHERE Mahang =N'" + cboMahang.SelectedValue
+ "'"; txtTenhang.Text = Functions.GetFieldValues(str); str = "SELECT Dongiaban FROM tblHang WHERE Mahang =N'" + cboMahang.SelectedValue
private void txtSoluong_TextChanged(object sender, EventArgs e) { //Khi thay doi So luong, Giam gia thi Thanh tien tu dong cap nhat lai gia tri double tt, sl, dg, gg; if (txtSoluong.Text == "") sl = 0; else sl = Convert.ToDouble(txtSoluong.Text); if (txtGiamgia.Text == "") gg = 0; else gg = Convert.ToDouble(txtGiamgia.Text); if (txtDongiaban.Text == "") dg = 0; else dg = Convert.ToDouble(txtDongiaban.Text); tt = sl * dg - sl * dg * gg / 100; txtThanhtien.Text = tt.ToString(); }
9.3.20.Viết thủ tục txtGiamgia_TextChanged
private void txtGiamgia_TextChanged(object sender, EventArgs e) { //Khi thay doi So luong, Giam gia thi Thanh tien tu dong cap nhat lai gia tri double tt, sl, dg, gg; if (txtSoluong.Text == "") sl = 0; else sl = Convert.ToDouble(txtSoluong.Text);
private void frmHoadonban_FormClosing(object sender, FormClosingEventArgs e) { //Xóa dữ liệu trong các điếu khiếOn trươc khi đóng Form ResetValues(); }
Thủ tục này cho phép người dùng kích đú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ú ý: trong form frmHoadonBan đổi thuộc tính Modifiers của điều khiển txtMaHDBan thành Public
private void DataGridView_DoubleClick(object sender, EventArgs e) { string mahd; if (MessageBox.Show("Bạn có muố8n hiếOn thị thống tin chi tiế8t?", "Xác nhận",
1. Điều khiển DataGridView và cách nhập dữ liệu trực tiếp trên lưới
Viết chương trình quản lý điểm của sinh viên, cho phép Thêm, Xem, Sửa, Xoá điểm trực tiếp trên lưới.
Tạo một dự án mới đặt tên là QuanlyDiem.
1.1. Tạo cơ sở dữ liệu
Tạo mới cơ sở dữ liệu đặt tên là Diem.mdf gồm các bảng như sau:
Bảng btlLop
Bảng tblSinhvien
Bảng tblDiem
Giả sử bảng tblLop và tblSinhvien đã có sẵn dữ liệu như sau (để nhập dữ liệu cho các bảng tại SQL, trong cửa sổ Server Explorer kích chuột phải tại tên bảng, chọn Show Table Data và nhập dữ liệu cho các dòng của bảng).
Bảng tblLop
Bảng tblSinhvien
Chú ý : Tạo kết nối tới CSDL được thực hiện tương tự như mục 2.8 của chương 7.
1.2. Xây dựng form cho chương trình
Sửa lại một số thuộc tính của Form1 và thêm các điều khiển như sau:
Điều khiển Name Text
Form frmDiem QUAN LY DIEM
Button btnNhapdiem, btnCapnhat, btnDong
ComboBox cboLop
DataGridView DataGridView
1.3. Viết mã lệnh Form frmDiem
Giả sử đã có lớp Functions trong thư mục Class.
3/- TreeView
Là điều khiển để hiển thị hệ thống phân cấp như cấu trúc tổ chức, gia phả, hệ thống thư mục, …
Điều khiển TreeView
Các thuộc tính thường dùng của TreeView :
Nodes
Tập hợp các nút con của TreeView.
CheckBoxes
Hiển thị CheckBox cho mỗi Node hay không.
SelectedNode
Node được chọn trên TreeView (chỉ có khi viết lệnh).
HideSelection
Thuộc tính luận lý, mặc định là True, node được chọn không hiển thị màu chọn khi điều khiển không còn focus. Nếu là False nút chọn vẫn được tô dạng chọn khi điều khiển mất focus.
ImageList
Chỉ định điều khiển ImageList có sẵn trên form làm nguồn hình ảnh cho TreeView.
ImageIndex, ImageKey
Quy định hình ảnh mặc định nào trên ImageList hiển thị trên mỗi node của TreeView.
Indent
Quy định khoảng cách theo chiều ngang giữa mỗi cấp.
ItemHeight
Quy định chiều cao của mỗi node.
SelectedImageIndex, SelectedImageKey
Quy định hình ảnh nào trên ImageList hiển thị trên node được chọn.