SlideShare a Scribd company logo
1 of 58
Download to read offline
Bài 4:
LẬP TRÌNH VỚI CSDL
ADO.NET & KIẾN TRÚC KHÔNG KẾT NỐI
& LẬP TRÌNH GIAO DIỆN
Các nhóm điều khiển trên form
Các điều khiển thường dùng
Các điều khiển chứa
Các điều khiển menu
Các điều khiển dữ liệu
Các thành phần
Các điều khiển hỗ trợ in
Các điều khiển hộp thoại
Sự kiện và xử lý sự kiện trong C#
Hệ thống bài cũ
Các nhóm điều khiển trên form
Các điều khiển thường dùng
Các điều khiển chứa
Các điều khiển menu
Các điều khiển dữ liệu
Các thành phần
Các điều khiển hỗ trợ in
Các điều khiển hộp thoại
Sự kiện và xử lý sự kiện trong C#
Lập trình giao diện - ứng dụng gồm nhiều form 2
Mục tiêu bài học
Giới thiệu về ADO.NET
Các thành phần của ADO.NET
DataProvider
DataSet
Các loại DataProvider
Sql Data Provider
SqlConnection
SqlDataAdapter
Ứng dụng nhiều form
Ứng dụng SDI
Ứng dụng MDI
Thêm Toolbar, Tooltip vào form
Giới thiệu về ADO.NET
Các thành phần của ADO.NET
DataProvider
DataSet
Các loại DataProvider
Sql Data Provider
SqlConnection
SqlDataAdapter
Ứng dụng nhiều form
Ứng dụng SDI
Ứng dụng MDI
Thêm Toolbar, Tooltip vào form
Lập trình giao diện - ứng dụng gồm nhiều form 3
ADO.NET (ActiveX Data Objects .NET) là một thành
phần trong .NET Framework đảm nhiệm vai trò thao
tác với CSDL
ADO.NET
ADO.NET (ActiveX Data Objects .NET) là một thành
phần trong .NET Framework đảm nhiệm vai trò thao
tác với CSDL
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 4
ADO.NET là cầu nối giữa ứng dụng và CSDL
ADO.NET hỗ trợ các lập trình viên kết nối với hệ quản trị
CSDL như SQL Server, Microsoft Access, Oracle…
ADO.NET
ADO.NET là cầu nối giữa ứng dụng và CSDL
ADO.NET hỗ trợ các lập trình viên kết nối với hệ quản trị
CSDL như SQL Server, Microsoft Access, Oracle…
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 5
Hỗ trợ lập trình
Cung cấp các lớp thao tác với CSDL giúp lập trình viên lập
trình nhanh hơn và giảm bớt lỗi
Cung cấp các công cụ để thao tác với CSDL ngay trên
phần Designer giúp lập trình viên tương tác với CSDL mà
không cần hiểu sâu về CSDL
Khả năng mở rộng
Sử dụng kiến trúc không kết nối chỉ kết nối với dữ liệu
lúc khi cần thiết nên giảm tải cho server CSDL  Ứng
dụng có thể đáp ứng nhiều người dùng hơn
Khả năng tích hợp
ADO.NET có thể gửi dữ liệu cho bất cứ ứng dụng nào hỗ
trợ XML
Tính năng của ADO.NET
Hỗ trợ lập trình
Cung cấp các lớp thao tác với CSDL giúp lập trình viên lập
trình nhanh hơn và giảm bớt lỗi
Cung cấp các công cụ để thao tác với CSDL ngay trên
phần Designer giúp lập trình viên tương tác với CSDL mà
không cần hiểu sâu về CSDL
Khả năng mở rộng
Sử dụng kiến trúc không kết nối chỉ kết nối với dữ liệu
lúc khi cần thiết nên giảm tải cho server CSDL  Ứng
dụng có thể đáp ứng nhiều người dùng hơn
Khả năng tích hợp
ADO.NET có thể gửi dữ liệu cho bất cứ ứng dụng nào hỗ
trợ XML
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 6
Kiến trúc không kết nối
Kết nối được thiết lập và tạo một bản sao của CSDL ngay
trên máy tính, sau đó kết nối được đóng
Thao tác với bản sao và update lại CSDL khi cần thiết
Ưu điểm
Tiết kiệm tài nguyên
Bảo mật vì kết nối được mở trong thời gian ngắn
Kiến trúc không kết nối
Kiến trúc không kết nối
Kết nối được thiết lập và tạo một bản sao của CSDL ngay
trên máy tính, sau đó kết nối được đóng
Thao tác với bản sao và update lại CSDL khi cần thiết
Ưu điểm
Tiết kiệm tài nguyên
Bảo mật vì kết nối được mở trong thời gian ngắn
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 7
ADO gồm hai phần
.NET data provider: cung cấp các lớp để kết nối, thực thi
lệnh SQL trên CSDL và lấy kết quả trả về
Dataset: lưu trữ bản sao của CSDL trên bộ nhớ. Cung cấp
các phương thức cho phép ứng dụng thao tác với bản sao
Các thành phần chính của ADO.NET
ADO gồm hai phần
.NET data provider: cung cấp các lớp để kết nối, thực thi
lệnh SQL trên CSDL và lấy kết quả trả về
Dataset: lưu trữ bản sao của CSDL trên bộ nhớ. Cung cấp
các phương thức cho phép ứng dụng thao tác với bản sao
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 8
Data provider cung cấp các lớp để tương tác với CSDL
Data provider gồm 4 thành phần chính
Connection: kết nối với CSDL
Command: thực thi các lệnh sql để lấy dữ liệu từ CSDL
hoặc thay đổi CSDL
DataReader: đọc dữ liệu tuần tự từ CSDL
DataAdapter: lấy dữ liệu từ CSDL lưu vào dataset và cập
nhật CSDL
Data provider
Data provider cung cấp các lớp để tương tác với CSDL
Data provider gồm 4 thành phần chính
Connection: kết nối với CSDL
Command: thực thi các lệnh sql để lấy dữ liệu từ CSDL
hoặc thay đổi CSDL
DataReader: đọc dữ liệu tuần tự từ CSDL
DataAdapter: lấy dữ liệu từ CSDL lưu vào dataset và cập
nhật CSDL
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 9
Ví dụ thực tiễn
Vấn đề: Một ngân hàng đa quốc gia có rất nhiều chi
nhánh. Giả sử một chi nhánh ở Việt Nam muốn truy cập
thông tin.
Giải pháp: Lấy thông tin cần thiết và lưu vào máy cục bộ
dưới dạng dataset
Dataset là bản sao của CSDL hay một phần CSDL trên
bộ nhớ
DataSet Hỗ trợ kiến trúc không kết nối
Kết nối đến CSDL chỉ được mở khi lấy dữ liệu về dataset
và cập nhật dữ liệu trở lại CSDL
Mọi thao tác sẽ được thực hiện trên DataSet
DataSet không phụ thuộc vào loại CSDL
Dataset
Ví dụ thực tiễn
Vấn đề: Một ngân hàng đa quốc gia có rất nhiều chi
nhánh. Giả sử một chi nhánh ở Việt Nam muốn truy cập
thông tin.
Giải pháp: Lấy thông tin cần thiết và lưu vào máy cục bộ
dưới dạng dataset
Dataset là bản sao của CSDL hay một phần CSDL trên
bộ nhớ
DataSet Hỗ trợ kiến trúc không kết nối
Kết nối đến CSDL chỉ được mở khi lấy dữ liệu về dataset
và cập nhật dữ liệu trở lại CSDL
Mọi thao tác sẽ được thực hiện trên DataSet
DataSet không phụ thuộc vào loại CSDL
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 10
Cấu trúc của DataSet giống hệt cấu trúc của cơ sở dữ
liệu
Mỗi dataset gồm nhiều bảng
Các bảng có ràng buộc với nhau
Mỗi bảng có nhiều dòng và cột
Mỗi cột có nhiều dòng
Mỗi dòng có nhiều cột
DataSet
Cấu trúc của DataSet giống hệt cấu trúc của cơ sở dữ
liệu
Mỗi dataset gồm nhiều bảng
Các bảng có ràng buộc với nhau
Mỗi bảng có nhiều dòng và cột
Mỗi cột có nhiều dòng
Mỗi dòng có nhiều cột
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 11
DataAdapter kết nối với CSDL thông qua Connection, lấy
dữ liệu lưu vào DataSet.
Ứng dụng sẽ lấy và thay đổi dữ liệu trên DataSet
DataAdapter kết nối với CSDL thông qua Connection và
cập nhật lại CSDL
Kiến trúc không kết nối
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 12
Các data provider được đặt trong các namespace khác nhau
Các lớp cho các data provider
Các loại Data provider
Provider Namespace
SQL Server System.Data.SqlClient
OLE DB System.Data.OleDb
ODBC System.Data.Odbc
Oracle System.Data.OracleClient
Các data provider được đặt trong các namespace khác nhau
Các lớp cho các data provider
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 13
Oracle System.Data.OracleClient
Object SQL Server OLE DB ODBC Oracle
Connection SqlConnection OleDbConnection OdbcConnection OracleConnection
Command SqlCommand OleDbCommand OdbcCommand OracleCommand
Data reader SqlDataReader OldeDbDataReader OdbcDataReader OracleDataReader
Data
adapter
SqlDataAdapter OleDbDataAdapter OdbcDataAdapter OracleDataAdapter
Các lớp của các loại data provider về cơ bản giống
nhau vì cùng kế thừa từ một lớp
Ví dụ OleDbDataAdpater và SqlDataAdapter cùng
kế thừa từ lớp DbDataAdapter
Với môn này sẽ học về SQL data provider để thao tác với
CSDL Microsoft SQL Server 2008
Các loại Data provider
Các lớp của các loại data provider về cơ bản giống
nhau vì cùng kế thừa từ một lớp
Ví dụ OleDbDataAdpater và SqlDataAdapter cùng
kế thừa từ lớp DbDataAdapter
Với môn này sẽ học về SQL data provider để thao tác với
CSDL Microsoft SQL Server 2008
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 14
Thực hiện kết nối với CSDL
Phương thức khởi tạo
Thuộc tính và phương thức
Các giá trị trên chuỗi kết nối
SqlConnection
new SqlConnection()
new SqlConnection(chuỗi-kết-nối)
Thuộc tính/Phương thức Mô tả
ConnectionString Cung cấp thông tin để truy cập đến CSDL SQL Server
Thực hiện kết nối với CSDL
Phương thức khởi tạo
Thuộc tính và phương thức
Các giá trị trên chuỗi kết nối
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 15
ConnectionString Cung cấp thông tin để truy cập đến CSDL SQL Server
Open() Mở kết nối
Close() Đóng kết nối
Giá trị Mô tả
Data source/Server Tên Server CSDL
Initial catalog/DataBase Tên của CSDL
UserID Tên của user đăng nhập vào CSDL
DataAdapter hoạt động như cầu nối giữa dataset và
CSDL
SqlDataAdapter
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 16
Phương thức khởi tạo
Thuộc tính
SqlDataAdapter
new SqlDataAdapter()
new SqlDataAdapter(lệnh-truy-vấn, Connection)
Thuộc tính Mô tả
DeleteCommand Lệnh sql hoặc sp để xóa dữ
liệu từ dataset
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 17
DeleteCommand Lệnh sql hoặc sp để xóa dữ
liệu từ dataset
SelectCommand Lệnh sql hoặc sp để lấy dữ
liệu từ dataset
InsertCommand Lệnh sql hoặc sp để thêm dữ
liệu vào dataset
UpdateCommand Lệnh sql hoặc sp để cập nhật
dữ liệu cho dataset
Phương thức
SqlDataAdapter
Phương thức Mô tả
Fill (dataset) Lấy dữ liệu đổ vào dataset
Update(dataset) Cập nhật những dữ liệu thay
đổi trên dataset lên CSDL
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 18
Sử dụng phương thức DataAdapter để fill Dataset
Đọc dữ liệu vào form từ Dataset
Thay đổi dữ liệu trên Dataset
Update lại dữ liệu trên CSDL
Demo thao tác với
dữ liệu bằng kiến trúc không kết nối
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 19
Các bước thực hiện Lập trình cơ sở dữ liệu
1. Khai báo các biến
SqlConnection conn; // biến connection kết nối đến CSDL
SqlCommand com; // thực thi các lệnh sql để lấy dữ liệu từ hoặc là thay
//đổi CSDL
SqlDataAdapter da; // biến có kiểu
DataSet ds; // biến dataset
2. Khởi tạo biến
conn = new SqlConnection("Data Source=localhost; Initial Catalog=ProductDB;Persist Security
Info=True;User ID=sa;Password=sa");
conn.Open(); // Thực hiện mở kết nối đến CSDL
da = new SqlDataAdapter();
ds = new DataSet();
com = new SqlCommand("Select * from Products", conn); // thực hiện truy vấn CSDL
da.SelectCommand = com;
da.Fill(ds, "Products"); // Đưa kết quả câu lệnh truy vấn vào dataset
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 20
2. Khởi tạo biến
conn = new SqlConnection("Data Source=localhost; Initial Catalog=ProductDB;Persist Security
Info=True;User ID=sa;Password=sa");
conn.Open(); // Thực hiện mở kết nối đến CSDL
da = new SqlDataAdapter();
ds = new DataSet();
com = new SqlCommand("Select * from Products", conn); // thực hiện truy vấn CSDL
da.SelectCommand = com;
da.Fill(ds, "Products"); // Đưa kết quả câu lệnh truy vấn vào dataset
3. Lấy 1 dòng dữ liệu trong bảng
ds.Tables[0].Rows.Count; // trả về tổng số bản ghi
ds.Tables[0].Rows[i].ItemArray[j].ToString() // Lấy cột thứ J của hàng thứ i
Demo load dữ liệu vào ListView
private void frmBookDetails_Load(object sender, EventArgs e)
{
com = new SqlCommand("Select * from Products",conn);
da.SelectCommand = com;
da.Fill(ds, "Products");
for (rows = 0; rows < ds.Tables[0].Rows.Count; rows++)
{
lvwBookDetails.Items.Add(ds.Tables[0].Rows[rows].ItemArray[0].ToString()); //thêm vào cột thứ nhất
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[1].ToString());
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[2].ToString());
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[3].ToString());
}
}
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 21
private void frmBookDetails_Load(object sender, EventArgs e)
{
com = new SqlCommand("Select * from Products",conn);
da.SelectCommand = com;
da.Fill(ds, "Products");
for (rows = 0; rows < ds.Tables[0].Rows.Count; rows++)
{
lvwBookDetails.Items.Add(ds.Tables[0].Rows[rows].ItemArray[0].ToString()); //thêm vào cột thứ nhất
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[1].ToString());
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[2].ToString());
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[3].ToString());
}
}
Demo hiển thị dữ liệu
khi một dòng trên ListView được chọn
private void lvwBookDetails_Click(object sender, EventArgs e)
{
int index = lvwBookDetails.SelectedItems[0].Index; // Dòng được chọn
DataRow dr = ds.Tables["Products"].Rows[index]; // Lấy dòng được chọn
txtCode.Text = dr[0].ToString();
txtTitle.Text = dr[1].ToString();
txtPrice.Text = dr[2].ToString();
txtQuantity.Text = dr[3].ToString();
}
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 22
private void lvwBookDetails_Click(object sender, EventArgs e)
{
int index = lvwBookDetails.SelectedItems[0].Index; // Dòng được chọn
DataRow dr = ds.Tables["Products"].Rows[index]; // Lấy dòng được chọn
txtCode.Text = dr[0].ToString();
txtTitle.Text = dr[1].ToString();
txtPrice.Text = dr[2].ToString();
txtQuantity.Text = dr[3].ToString();
}
ỨNG DỤNG
GỒM NHIỀU FORM
Lập trình giao diện - ứng dụng gồm nhiều form 23
ỨNG DỤNG
GỒM NHIỀU FORM
Ứng dụng Payment gồm 2 form
Form Payment được mở khi nhấn vào button Select
Payment trên form Customer
Thao tác trên form Payment mới được thao tác trên form
Customer
Chạy thử ứng dụng Payment
Lập trình giao diện - ứng dụng gồm nhiều form 24
Có thể thêm một form mới hoặc một form có sẵn vào
Project
Thêm form vào Project
Thêm một form mới
Lập trình giao diện - ứng dụng gồm nhiều form 25
Thêm một form mới
Thêm một form có sẵn
Thêm form frmPayment và thiết kế như sau
Demo thêm form Payment vào Project
Lập trình giao diện - ứng dụng gồm nhiều form 26
Khi ứng dụng nhiều form chạy, theo mặc định ứng dụng
sẽ tải form được tạo đầu tiên trước
Đối với ứng dụng nhiều form, với form này gọi form kia.
Có thể lập trình viên muốn chạy từng form để kiểm thử
từng form
Hiển thị form đầu tiên của Project
Lập trình giao diện - ứng dụng gồm nhiều form 27
Thông tin về form được tải đầu tiên của project được lưu
trong file Program.cs
Demo hiển thị form đầu tiên của Project
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmCustomer());
}
Mặc định frmCustomer được load
trước tiên
Lập trình giao diện - ứng dụng gồm nhiều form 28
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmCustomer());
}
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmPayment());
}
frmPayment được load trước tiên
Có hai cách hiển thị form mới
Hiển thị theo kiểu dialog: Người dùng phải thao tác với
form mới này trước tiên
Hiển thị thông thường: Người dùng có thể thao tác với
form tùy ý
Cách hiển thị form mới
B1. Sử dụng từ khóa new để tạo form mới
B2. Sử dụng phương thức ShowDialog hoặc Show của
form mới để hiển thị form
Hiển thị form mới
Có hai cách hiển thị form mới
Hiển thị theo kiểu dialog: Người dùng phải thao tác với
form mới này trước tiên
Hiển thị thông thường: Người dùng có thể thao tác với
form tùy ý
Cách hiển thị form mới
B1. Sử dụng từ khóa new để tạo form mới
B2. Sử dụng phương thức ShowDialog hoặc Show của
form mới để hiển thị form
Lập trình giao diện - ứng dụng gồm nhiều form 29
Form paymentForm = new frmPayment();
paymentForm.ShowDialog(); //Hiển thị form dialog
paymentForm.Show(); //Hiển thị form thông thường
Demo hiển thị form Payment khi người dùng nhấn vào
button Select Payment trên form Customer
Demo hiển thị form Payment
private void btnSelectPayment_Click(object sender, System.EventArgs e)
{
Form paymentForm = new frmPayment();
DialogResult selectedButton = paymentForm.ShowDialog();
}
Lập trình giao diện - ứng dụng gồm nhiều form 30
private void btnSelectPayment_Click(object sender, System.EventArgs e)
{
Form paymentForm = new frmPayment();
DialogResult selectedButton = paymentForm.ShowDialog();
}
DialogResult result = MessageBox.Show("Bạn muốn xóa không", "Xóa",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (result==DialogResult.OK)
{
//Đoạn mã xóa dữ liệu
}
Form Dialog được tạo sẵn
Form Dialog tự tạo
Xử lý sự kiện cho các button trên form dialog tự tạo
Thiết lập giá trị cho thuộc tính DialogResult
Lấy phản hồi của người dùng từ Dialog
Form Dialog được tạo sẵn
Form Dialog tự tạo
Xử lý sự kiện cho các button trên form dialog tự tạo
Thiết lập giá trị cho thuộc tính DialogResult
Lập trình giao diện - ứng dụng gồm nhiều form 31
this.DialogResult = DialogResult.OK;
Form Payment
Form Customer
Demo lấy phản hồi từ form Payment
private void btnOK_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
Form Payment
Form Customer
Lập trình giao diện - ứng dụng gồm nhiều form 32
private void btnCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
private void btnSelectPayment_Click(object sender, System.EventArgs
{
Form paymentForm = new frmPayment();
DialogResult selectedButton = paymentForm.ShowDialog();
if (selectedButton == DialogResult.OK)
{
MessageBox.Show("Bạn vừa chọn OK");
}
}
Form cung cấp thuộc tính Tag để lưu đối tượng chứa dữ
liệu của form
Cũng có thể tự khai báo thuộc tính bất kỳ để lưu dữ liệu
cho form và truyền cho form khác bằng cách truy cập
đến thuộc tính đó trên form khác
Truyền dữ liệu giữa các form
Lập trình giao diện - ứng dụng gồm nhiều form 33
Form Payment
Form Customer
Demo truyền dữ liệu
từ form Payment cho form Customer
private void btnOK_Click(object sender, EventArgs e)
{
string msg = null;
//Đoạn mã gán dữ liệu của form cho biến msg
//…
this.Tag = msg;
this.DialogResult = DialogResult.OK;
}
Form Payment
Form Customer
Lập trình giao diện - ứng dụng gồm nhiều form 34
private void btnOK_Click(object sender, EventArgs e)
{
string msg = null;
//Đoạn mã gán dữ liệu của form cho biến msg
//…
this.Tag = msg;
this.DialogResult = DialogResult.OK;
}
private void btnSelectPayment_Click(object sender,
System.EventArgs e)
{
Form paymentForm = new frmPayment();
DialogResult selectedButton = paymentForm.ShowDialog();
if (selectedButton == DialogResult.OK)
{
lblPayment.Text = (string) paymentForm.Tag;
}
}
Sự kiện xẩy ra khi người dùng nhấn vào button gọi đến
phương thức Close của form nhưng trước khi form được
đóng thực sự
Sự kiện này thường được dùng để ngăn người dùng
đóng form chứa dữ liệu chưa được lưu
Nếu muốn đóng form, thiết lập e.Cancel = false (mặc
định)
Nếu muốn hủy lệnh đóng form, thiết lập e.Cancel = true
Sự kiện FormClosing
private void frmCustomer_FormClosing(object sender,
FormClosingEventArgs e)
{
//Viết mã ở đây
}
Sự kiện xẩy ra khi người dùng nhấn vào button gọi đến
phương thức Close của form nhưng trước khi form được
đóng thực sự
Sự kiện này thường được dùng để ngăn người dùng
đóng form chứa dữ liệu chưa được lưu
Nếu muốn đóng form, thiết lập e.Cancel = false (mặc
định)
Nếu muốn hủy lệnh đóng form, thiết lập e.Cancel = true
Lập trình giao diện - ứng dụng gồm nhiều form 35
private void frmCustomer_FormClosing(object sender,
FormClosingEventArgs e)
{
//Viết mã ở đây
}
Demo xử lý sự kiện
FormClosing cho frmCustomer
private void frmCustomer_FormClosing(object sender,
FormClosingEventArgs e)
{
if (isDataSaved == false)
{
string message =
"This form contains unsaved data.nn" +
"Do you want to save it?";
DialogResult button =
MessageBox.Show(message, "Customer",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning);
if (button == DialogResult.Yes)
{
//Đoạn mã lưu dữ liệu
}
if (button == DialogResult.Cancel)
{
e.Cancel = true;
}
}
}
Lập trình giao diện - ứng dụng gồm nhiều form 36
private void frmCustomer_FormClosing(object sender,
FormClosingEventArgs e)
{
if (isDataSaved == false)
{
string message =
"This form contains unsaved data.nn" +
"Do you want to save it?";
DialogResult button =
MessageBox.Show(message, "Customer",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning);
if (button == DialogResult.Yes)
{
//Đoạn mã lưu dữ liệu
}
if (button == DialogResult.Cancel)
{
e.Cancel = true;
}
}
}
Ứng dụng SDI (single document interface – giao diện
đơn tài liệu) là ứng dụng
gồm nhiều form độc lập với nhau
mỗi form có thể có menu và toolbar riêng
mỗi form chạy trên một cửa sổ riêng
Với loại ứng dụng này cần có một form chính cung cấp
truy cập đến các form khác của ứng dụng
Ứng dụng SDI
Ứng dụng SDI (single document interface – giao diện
đơn tài liệu) là ứng dụng
gồm nhiều form độc lập với nhau
mỗi form có thể có menu và toolbar riêng
mỗi form chạy trên một cửa sổ riêng
Với loại ứng dụng này cần có một form chính cung cấp
truy cập đến các form khác của ứng dụng
Lập trình giao diện - ứng dụng gồm nhiều form 37
Chạy thử
ứng dụng SDI Financial Calculation
Lập trình giao diện - ứng dụng gồm nhiều form 38
Form chính
Gọi đến form frmFutureValue khi nhấn vào button
Calculate Future Value trên form frmMain
Gọi đến form frmDepreciation khi nhấn vào button
Calculate SYD Depreciation trên form frmMain
Demo gọi đến các form từ form chính
private void btnFutureValue_Click(object sender, System.EventArgs e)
{
Form newForm = new frmFutureValue();
newForm.Show();
}
Gọi đến form frmFutureValue khi nhấn vào button
Calculate Future Value trên form frmMain
Gọi đến form frmDepreciation khi nhấn vào button
Calculate SYD Depreciation trên form frmMain
Lập trình giao diện - ứng dụng gồm nhiều form 39
private void btnFutureValue_Click(object sender, System.EventArgs e)
{
Form newForm = new frmFutureValue();
newForm.Show();
}
private void btnCalculateDepreciation_Click(object sender, System.Event
{
Form newForm = new frmDepreciation();
newForm.Show();
}
Đóng tất cả các form (khi người dùng nhấn vào button
Exit của form chính)
Đóng từng form (khi người dùng nhấn vào button Close
của từng form)
Demo đóng form
private void btnExit_Click(object sender, System.EventArgs e)
{
Application.Exit();
}
Đóng tất cả các form (khi người dùng nhấn vào button
Exit của form chính)
Đóng từng form (khi người dùng nhấn vào button Close
của từng form)
Lập trình giao diện - ứng dụng gồm nhiều form 40
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
Có thể sử dụng điều khiển Tab thay cho kiểu giao diện
SDI
Mỗi điều khiển Tab có nhiều page, có thể thêm và xóa các
page này
Sử dụng thuộc tính SelectedIndex để xác định tab nào
đang được focus
Sử dụng Tab
Có thể sử dụng điều khiển Tab thay cho kiểu giao diện
SDI
Mỗi điều khiển Tab có nhiều page, có thể thêm và xóa các
page này
Sử dụng thuộc tính SelectedIndex để xác định tab nào
đang được focus
Lập trình giao diện - ứng dụng gồm nhiều form 41
Xử lý sự kiện cho button Calculate
Xử lý sự kiện SelectedIndexChanged của điều khiển Tab
Demo sử dụng điều khiển Tab
private void btnCalculate_Click(object sender, System.EventArgs e)
{
if (tabCalculations.SelectedIndex == 0)
DisplayFutureValue();
else if (tabCalculations.SelectedIndex == 1)
DisplayDepreciation();
}
Xử lý sự kiện cho button Calculate
Xử lý sự kiện SelectedIndexChanged của điều khiển Tab
Lập trình giao diện - ứng dụng gồm nhiều form 42
private void btnCalculate_Click(object sender, System.EventArgs e)
{
if (tabCalculations.SelectedIndex == 0)
DisplayFutureValue();
else if (tabCalculations.SelectedIndex == 1)
DisplayDepreciation();
}
private void tabCalculations_SelectedIndexChanged(object sender,
EventArgs e)
{
if (tabCalculations.SelectedIndex == 0)
txtMonthlyInvestment.Focus();
else if (tabCalculations.SelectedIndex == 1)
txtInitialCost.Focus();
}
MDI (multiple-document interface – giao diện đa tài liệu)
là giao diện có một form cha chứa nhiều form con
Sử dụng menu trên form cha để có thể truy cập đến các
form con
Ứng dụng MDI
Lập trình giao diện - ứng dụng gồm nhiều form 43
Chạy thử ứng dụng
MDI Financial Calculations
Lập trình giao diện - ứng dụng gồm nhiều form 44
Trong cửa sổ Properties, thiết lập thuộc tính
IsMdiContainer của form là true
Tạo form cha
Lập trình giao diện - ứng dụng gồm nhiều form 45
Viết code thiết lập thuộc tính MdiParent chỉ ra form cha
cho form con
Đoạn mã này mở form FutureValue khi người dùng nhấn
vào menu New Future Value trên form cha
Tạo form con
private void mnuNewFutureValue_Click(object sender, System.EventArgs e)
{
Form newForm = new frmFutureValue();
newForm.MdiParent = this;
newForm.Show();
}
Lập trình giao diện - ứng dụng gồm nhiều form 46
private void mnuNewFutureValue_Click(object sender, System.EventArgs e)
{
Form newForm = new frmFutureValue();
newForm.MdiParent = this;
newForm.Show();
}
Sử dụng thuộc tính ActiveMdiChild để lấy tham chiếu
đến form con đang được kích hoạt
Đóng form con đang được kích hoạt
private void mnuClose_Click(object sender, System.EventArgs e)
{
Form activeForm = this.ActiveMdiChild;
if (activeForm != null)
activeForm.Close();
}
Sử dụng thuộc tính ActiveMdiChild để lấy tham chiếu
đến form con đang được kích hoạt
Lập trình giao diện - ứng dụng gồm nhiều form 47
private void mnuClose_Click(object sender, System.EventArgs e)
{
Form activeForm = this.ActiveMdiChild;
if (activeForm != null)
activeForm.Close();
}
Sử dụng phương thức LayoutMdi(KieuLayOut) để sắp
xếp các form con
Có các kiểu sắp xếp như Cascade, TileVertical,
TileHorizontal…
Sắp xếp các form con
private void mnuCascade_Click(object sender, System.EventArgs e)
{
this.LayoutMdi(MdiLayout.Cascade);
}
Lập trình giao diện - ứng dụng gồm nhiều form 48
private void mnuCascade_Click(object sender, System.EventArgs e)
{
this.LayoutMdi(MdiLayout.Cascade);
}
Thiết lập thuộc tính MDIWindowListItem của điều khiển
MenuStrip cho menu muốn hiển thị
Hiển thị danh sách
của tất cả các form con đang được mở
Lập trình giao diện - ứng dụng gồm nhiều form 49
Thêm menu riêng cho mỗi form con
Thêm menu riêng cho form con giống như thêm menu
cho form thông thường
Menu này sẽ được thêm vào sau thanh menu của form
cha khi menu con được kích hoạt
NÂNG CẤP ỨNG DỤNG FINANCIAL CALCULATION
Lập trình giao diện - ứng dụng gồm nhiều form 50
Toolbar được dùng để chứa các công cụ cho form
Sử dụng điều khiển ToolStrip
Thêm Toolbar
Toolbar được dùng để chứa các công cụ cho form
Sử dụng điều khiển ToolStrip
Lập trình giao diện - ứng dụng gồm nhiều form 51
ToolStrip ToolStrip
Có thể thêm Toolbar tiêu chuẩn hoặc Toolbar tùy chỉnh
Demo Thêm Toolbar
Lập trình giao diện - ứng dụng gồm nhiều form 52
Tạo Toolbar tiêu chuẩn
Tạo Toolbar tùy chỉnh
Thêm Tool vào Toolbar
B1. Chọn kiểu Tool B2. Thêm Tool
B3. Thiết lập
ảnh đại diện
cho Tool
Lập trình giao diện - ứng dụng gồm nhiều form 53
B4. Thiết lập
văn bản giải
thích mục đích
của Tool
Nhấn vào button đầu tiên trên Toolbar để hiển thị form
Future Value
Demo thêm Toolbar
Lập trình giao diện - ứng dụng gồm nhiều form 54
//Hoặc là
Tooltip được sử dụng để giải thích ý nghĩa cho các điều
khiển trên form khi người dùng di chuột lên điều khiển
Khi thêm Tooltip vào form (theo mặc định có tên là
toolTip1), tất cả điều khiển đều có thêm thuộc tính
Tooltip on toolTip1
Thiết lập giá trị cho thuộc tính này cho mỗi điều khiển
hoặc cho form
Thêm Tooltip
Tooltip được sử dụng để giải thích ý nghĩa cho các điều
khiển trên form khi người dùng di chuột lên điều khiển
Khi thêm Tooltip vào form (theo mặc định có tên là
toolTip1), tất cả điều khiển đều có thêm thuộc tính
Tooltip on toolTip1
Thiết lập giá trị cho thuộc tính này cho mỗi điều khiển
hoặc cho form
Lập trình giao diện - ứng dụng gồm nhiều form 55
Thuộc tính ToolTip on
toolTip1 được thêm vào
các điều khiển
Trợ giúp theo ngữ cảnh sẽ
hiển thị văn bản trợ giúp cho
điều khiển được focus khi
người dùng nhấn F1
Trợ giúp theo ngữ cảnh
Khi thêm HelpProvider vào
form (theo mặc định có tên là
helpProvider1), tất cả điều
khiển đều có thêm thuộc tính
HelpString on helpProvider1
Lập trình giao diện - ứng dụng gồm nhiều form 56
Thuộc tính HelpString on helpProvider1
được thêm vào các điều khiển
Khi thêm HelpProvider vào
form (theo mặc định có tên là
helpProvider1), tất cả điều
khiển đều có thêm thuộc tính
HelpString on helpProvider1
Thiết lập giá trị cho thuộc tính này cho mỗi điều khiển hoặc
cho form
Tổng kết bài học
ADO.NET gồm hai phần data provider và dataset
.NET data provider cung cấp các lớp để kết nối, thực thi lệnh SQL
và lấy kết quả trả về
Dataset lưu trữ bản sao của CSDL hoặc một phần CSDL trên bộ
nhớ. Cung cấp các phương thức cho phép ứng dụng thao tác với
bản sao
Data provider gồm 4 thành phần chính là Connection,
Command, DataReader và DataAdapter
Command và DataReader thực hiện theo kiến trúc kết nối, nên
phải mở và đóng kết nối trước vào sau khi thao tác
DataAdapter thực hiện theo cơ chế không kết nối, đối tượng này
tự động mở và đóng kết nối khi cần thiết
ADO.NET gồm hai phần data provider và dataset
.NET data provider cung cấp các lớp để kết nối, thực thi lệnh SQL
và lấy kết quả trả về
Dataset lưu trữ bản sao của CSDL hoặc một phần CSDL trên bộ
nhớ. Cung cấp các phương thức cho phép ứng dụng thao tác với
bản sao
Data provider gồm 4 thành phần chính là Connection,
Command, DataReader và DataAdapter
Command và DataReader thực hiện theo kiến trúc kết nối, nên
phải mở và đóng kết nối trước vào sau khi thao tác
DataAdapter thực hiện theo cơ chế không kết nối, đối tượng này
tự động mở và đóng kết nối khi cần thiết
Một ứng dụng có thể bao gồm nhiều form. Từ một form
có thể mở form mới theo kiểu form thông thường hoặc
dialog
Đối với form dialog, khi mở form có giá trị trả về kiểu
DialogResult cho biết thao tác của người dùng trên form
Ứng dụng SDI gồm nhiều form độc lập với nhau, mỗi
form có thể có menu và toolbar riêng và mỗi form chạy
trên một cửa sổ riêng
Ứng dụng SDI này cần có một form chính cung cấp truy
cập đến các form khác của ứng dụng
Ứng dụng MDI là giao diện có một form cha chứa nhiều
form con
Tổng kết bài học
Một ứng dụng có thể bao gồm nhiều form. Từ một form
có thể mở form mới theo kiểu form thông thường hoặc
dialog
Đối với form dialog, khi mở form có giá trị trả về kiểu
DialogResult cho biết thao tác của người dùng trên form
Ứng dụng SDI gồm nhiều form độc lập với nhau, mỗi
form có thể có menu và toolbar riêng và mỗi form chạy
trên một cửa sổ riêng
Ứng dụng SDI này cần có một form chính cung cấp truy
cập đến các form khác của ứng dụng
Ứng dụng MDI là giao diện có một form cha chứa nhiều
form con
Lập trình giao diện - ứng dụng gồm nhiều form 58

More Related Content

What's hot

Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHai Rom
 
Báo cáo quản lý cửa hàng máy tính
Báo cáo quản lý cửa hàng máy tínhBáo cáo quản lý cửa hàng máy tính
Báo cáo quản lý cửa hàng máy tínhthuvienso
 
Báo cáo xây dựng và phát triển phần mềm
Báo cáo xây dựng và phát triển phần mềmBáo cáo xây dựng và phát triển phần mềm
Báo cáo xây dựng và phát triển phần mềmytthuan
 
Bài 5: Chuẩn hóa cơ sở dữ liệu
Bài 5: Chuẩn hóa cơ sở dữ liệuBài 5: Chuẩn hóa cơ sở dữ liệu
Bài 5: Chuẩn hóa cơ sở dữ liệuMasterCode.vn
 
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPTBài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPTMasterCode.vn
 
ERD - Database Design
ERD - Database DesignERD - Database Design
ERD - Database Designyht4ever
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1pisu412
 
lý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánlý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánNgo Trung
 
Hệ điều hành (chương 5)
Hệ điều hành (chương 5)Hệ điều hành (chương 5)
Hệ điều hành (chương 5)realpotter
 
Phân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngPhân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngleemindinh
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựleemindinh
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinVõ Phúc
 
Nhập môn công nghệ thông tin
Nhập môn công nghệ thông tinNhập môn công nghệ thông tin
Nhập môn công nghệ thông tinThanh Lee
 
Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệutrieulongweb
 
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phê
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phêbáo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phê
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phêthuhuynhphonegap
 
Phân tích thiết kế hệ thống thông tin
Phân tích thiết kế hệ thống thông tinPhân tích thiết kế hệ thống thông tin
Phân tích thiết kế hệ thống thông tinhuynhle1990
 
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.comBài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.commai_non
 

What's hot (20)

Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanh
 
Báo cáo quản lý cửa hàng máy tính
Báo cáo quản lý cửa hàng máy tínhBáo cáo quản lý cửa hàng máy tính
Báo cáo quản lý cửa hàng máy tính
 
Báo cáo xây dựng và phát triển phần mềm
Báo cáo xây dựng và phát triển phần mềmBáo cáo xây dựng và phát triển phần mềm
Báo cáo xây dựng và phát triển phần mềm
 
Bài 5: Chuẩn hóa cơ sở dữ liệu
Bài 5: Chuẩn hóa cơ sở dữ liệuBài 5: Chuẩn hóa cơ sở dữ liệu
Bài 5: Chuẩn hóa cơ sở dữ liệu
 
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPTBài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
 
ERD - Database Design
ERD - Database DesignERD - Database Design
ERD - Database Design
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
 
Đề tài: Xây Dựng Chương Trình Quản Lý Nhà Hàng Coffee SEN
Đề tài: Xây Dựng Chương Trình Quản Lý Nhà Hàng Coffee SENĐề tài: Xây Dựng Chương Trình Quản Lý Nhà Hàng Coffee SEN
Đề tài: Xây Dựng Chương Trình Quản Lý Nhà Hàng Coffee SEN
 
lý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tánlý thuyết cơ sở dữ liệu phân tán
lý thuyết cơ sở dữ liệu phân tán
 
Hệ điều hành (chương 5)
Hệ điều hành (chương 5)Hệ điều hành (chương 5)
Hệ điều hành (chương 5)
 
Phân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngPhân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàng
 
NoSql Database
NoSql DatabaseNoSql Database
NoSql Database
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sự
 
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đĐề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
Đề tài: Nghiên cứu thuật toán K-nearest neighbor, HAY, 9đ
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tin
 
Nhập môn công nghệ thông tin
Nhập môn công nghệ thông tinNhập môn công nghệ thông tin
Nhập môn công nghệ thông tin
 
Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệu
 
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phê
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phêbáo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phê
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phê
 
Phân tích thiết kế hệ thống thông tin
Phân tích thiết kế hệ thống thông tinPhân tích thiết kế hệ thống thông tin
Phân tích thiết kế hệ thống thông tin
 
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.comBài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
 

Viewers also liked

Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theoMasterCode.vn
 
Bài 7: Lập trình với CSDL – Sử dụng DESIGNER & Triển khai ứng dụng - Lập trìn...
Bài 7: Lập trình với CSDL – Sử dụng DESIGNER & Triển khai ứng dụng - Lập trìn...Bài 7: Lập trình với CSDL – Sử dụng DESIGNER & Triển khai ứng dụng - Lập trìn...
Bài 7: Lập trình với CSDL – Sử dụng DESIGNER & Triển khai ứng dụng - Lập trìn...MasterCode.vn
 
Lập trình ứng dụng web asp.net với C# - tailieumienphi.edu.vn
Lập trình ứng dụng web asp.net với C# - tailieumienphi.edu.vnLập trình ứng dụng web asp.net với C# - tailieumienphi.edu.vn
Lập trình ứng dụng web asp.net với C# - tailieumienphi.edu.vntailieumienphi
 
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoMasterCode.vn
 
Bài 6: Điều khiển DetailsView, FormView, ListView, DataPager
Bài 6: Điều khiển DetailsView, FormView, ListView, DataPagerBài 6: Điều khiển DetailsView, FormView, ListView, DataPager
Bài 6: Điều khiển DetailsView, FormView, ListView, DataPagerMasterCode.vn
 
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...MasterCode.vn
 
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPT
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPTBÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPT
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPTMasterCode.vn
 

Viewers also liked (7)

Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
 
Bài 7: Lập trình với CSDL – Sử dụng DESIGNER & Triển khai ứng dụng - Lập trìn...
Bài 7: Lập trình với CSDL – Sử dụng DESIGNER & Triển khai ứng dụng - Lập trìn...Bài 7: Lập trình với CSDL – Sử dụng DESIGNER & Triển khai ứng dụng - Lập trìn...
Bài 7: Lập trình với CSDL – Sử dụng DESIGNER & Triển khai ứng dụng - Lập trìn...
 
Lập trình ứng dụng web asp.net với C# - tailieumienphi.edu.vn
Lập trình ứng dụng web asp.net với C# - tailieumienphi.edu.vnLập trình ứng dụng web asp.net với C# - tailieumienphi.edu.vn
Lập trình ứng dụng web asp.net với C# - tailieumienphi.edu.vn
 
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
 
Bài 6: Điều khiển DetailsView, FormView, ListView, DataPager
Bài 6: Điều khiển DetailsView, FormView, ListView, DataPagerBài 6: Điều khiển DetailsView, FormView, ListView, DataPager
Bài 6: Điều khiển DetailsView, FormView, ListView, DataPager
 
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...
Bài 3: Lập trình giao diện điều khiển & Xử lý sự kiện - Lập trình winform - G...
 
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPT
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPTBÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPT
BÀI 2: Thiết kế FORM và xử lý sự kiện - Giáo trình FPT
 

Similar to Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao diện - Lập trình winform - Giáo trình FPT

Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...MasterCode.vn
 
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTBài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTMasterCode.vn
 
Bai 1 lam quen voi sql 2008
Bai 1 lam quen voi sql 2008Bai 1 lam quen voi sql 2008
Bai 1 lam quen voi sql 2008Phương Nhung
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nayledoanduc
 
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...MasterCode.vn
 
01 chuong 1 - gioi thieu ado.net va ket noi den csdl
01   chuong 1 - gioi thieu ado.net va ket noi den csdl01   chuong 1 - gioi thieu ado.net va ket noi den csdl
01 chuong 1 - gioi thieu ado.net va ket noi den csdltruong le hung
 
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Hiển Phùng
 
01 chuong1-gioithieuado-140404114504-phpapp01
01 chuong1-gioithieuado-140404114504-phpapp0101 chuong1-gioithieuado-140404114504-phpapp01
01 chuong1-gioithieuado-140404114504-phpapp01huynhtrong774129
 
Web course php & csdl
Web course   php & csdlWeb course   php & csdl
Web course php & csdl慂 志慂
 
6.adapterset
6.adapterset6.adapterset
6.adaptersetDao Uit
 
Gt he quan_tri_csdl_ms_sql_server
Gt he quan_tri_csdl_ms_sql_serverGt he quan_tri_csdl_ms_sql_server
Gt he quan_tri_csdl_ms_sql_serveranhanh81
 
Tailieu.vncty.com giao-trinh-sql-2000
Tailieu.vncty.com   giao-trinh-sql-2000Tailieu.vncty.com   giao-trinh-sql-2000
Tailieu.vncty.com giao-trinh-sql-2000Trần Đức Anh
 
Hoc sql server 2000
Hoc sql server 2000Hoc sql server 2000
Hoc sql server 2000phamhuuai
 
2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#Dao Uit
 

Similar to Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao diện - Lập trình winform - Giáo trình FPT (20)

Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
 
01 tong-quan-ado
01 tong-quan-ado01 tong-quan-ado
01 tong-quan-ado
 
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTBài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
 
Bai 1 lam quen voi sql 2008
Bai 1 lam quen voi sql 2008Bai 1 lam quen voi sql 2008
Bai 1 lam quen voi sql 2008
 
Aspnet 3.5 _02
Aspnet 3.5 _02Aspnet 3.5 _02
Aspnet 3.5 _02
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nay
 
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
Bài 7: Đối tượng Data Source -Đóng gói ứng dụng - Giới thiệu các kĩ thuật lập...
 
01 chuong 1 - gioi thieu ado.net va ket noi den csdl
01   chuong 1 - gioi thieu ado.net va ket noi den csdl01   chuong 1 - gioi thieu ado.net va ket noi den csdl
01 chuong 1 - gioi thieu ado.net va ket noi den csdl
 
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1
 
01 chuong1-gioithieuado-140404114504-phpapp01
01 chuong1-gioithieuado-140404114504-phpapp0101 chuong1-gioithieuado-140404114504-phpapp01
01 chuong1-gioithieuado-140404114504-phpapp01
 
Laptrinh jdbc
Laptrinh jdbcLaptrinh jdbc
Laptrinh jdbc
 
04 ado
04 ado04 ado
04 ado
 
3250
32503250
3250
 
Web course php & csdl
Web course   php & csdlWeb course   php & csdl
Web course php & csdl
 
6.adapterset
6.adapterset6.adapterset
6.adapterset
 
Gt he quan_tri_csdl_ms_sql_server
Gt he quan_tri_csdl_ms_sql_serverGt he quan_tri_csdl_ms_sql_server
Gt he quan_tri_csdl_ms_sql_server
 
Tailieu.vncty.com giao-trinh-sql-2000
Tailieu.vncty.com   giao-trinh-sql-2000Tailieu.vncty.com   giao-trinh-sql-2000
Tailieu.vncty.com giao-trinh-sql-2000
 
Hoc sql server 2000
Hoc sql server 2000Hoc sql server 2000
Hoc sql server 2000
 
C# co ban 9
C# co ban 9C# co ban 9
C# co ban 9
 
2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#2.gioi thieu co ban ado.net cho nguoi lap trinh c#
2.gioi thieu co ban ado.net cho nguoi lap trinh c#
 

More from MasterCode.vn

Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vn
Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vnPd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vn
Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vnMasterCode.vn
 
Why apps-succeed-wpr-mastercode.vn
Why apps-succeed-wpr-mastercode.vnWhy apps-succeed-wpr-mastercode.vn
Why apps-succeed-wpr-mastercode.vnMasterCode.vn
 
Dzone performancemonitoring2016-mastercode.vn
Dzone performancemonitoring2016-mastercode.vnDzone performancemonitoring2016-mastercode.vn
Dzone performancemonitoring2016-mastercode.vnMasterCode.vn
 
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vn
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vnGoogle công bố thông tin lịch xu hướng ngành 2017 mastercode.vn
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vnMasterCode.vn
 
Nghiên cứu về khách hàng mastercode.vn
Nghiên cứu về khách hàng mastercode.vnNghiên cứu về khách hàng mastercode.vn
Nghiên cứu về khách hàng mastercode.vnMasterCode.vn
 
Lập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnLập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnMasterCode.vn
 
Pd fbuoi7 8--tongquanseo-mastercode.vn
Pd fbuoi7 8--tongquanseo-mastercode.vnPd fbuoi7 8--tongquanseo-mastercode.vn
Pd fbuoi7 8--tongquanseo-mastercode.vnMasterCode.vn
 
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vn
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vnPd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vn
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vnMasterCode.vn
 
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vn
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vnPdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vn
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vnMasterCode.vn
 
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vn
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vnPd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vn
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vnMasterCode.vn
 
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vn
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vnPd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vn
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vnMasterCode.vn
 
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vn
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vnPd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vn
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vnMasterCode.vn
 
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vn
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vnPdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vn
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vnMasterCode.vn
 
Pdfbài 7 máy tính xác tay và máy in bảo trì sự cố máy tính-mastercode.vn
Pdfbài 7 máy tính xác tay và máy in   bảo trì sự cố máy tính-mastercode.vnPdfbài 7 máy tính xác tay và máy in   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 7 máy tính xác tay và máy in bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 6 bảo trì máy tính bảo trì sự cố máy tính-mastercode.vn
Pdfbài 6 bảo trì máy tính   bảo trì sự cố máy tính-mastercode.vnPdfbài 6 bảo trì máy tính   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 6 bảo trì máy tính bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 5 bảo trì và tối ưu windows bảo trì sự cố máy tính-mastercode.vn
Pdfbài 5 bảo trì và tối ưu windows   bảo trì sự cố máy tính-mastercode.vnPdfbài 5 bảo trì và tối ưu windows   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 5 bảo trì và tối ưu windows bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 4 ổ cứng hard drive bảo trì sự cố máy tính-mastercode.vn
Pdfbài 4 ổ cứng hard drive   bảo trì sự cố máy tính-mastercode.vnPdfbài 4 ổ cứng hard drive   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 4 ổ cứng hard drive bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 3 cpu và ram bảo trì sự cố máy tính-mastercode.vn
Pdfbài 3 cpu và ram   bảo trì sự cố máy tính-mastercode.vnPdfbài 3 cpu và ram   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 3 cpu và ram bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 1 giới thiệu chung về phần cứng bảo trì sự cố máy tính-mastercode.vn
Pdfbài 1 giới thiệu chung về phần cứng   bảo trì sự cố máy tính-mastercode.vnPdfbài 1 giới thiệu chung về phần cứng   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 1 giới thiệu chung về phần cứng bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 2 bo mạch chủ (main) bảo trì sự cố máy tính-mastercode.vn
Pdfbài 2 bo mạch chủ (main)   bảo trì sự cố máy tính-mastercode.vnPdfbài 2 bo mạch chủ (main)   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 2 bo mạch chủ (main) bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 

More from MasterCode.vn (20)

Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vn
Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vnPd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vn
Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vn
 
Why apps-succeed-wpr-mastercode.vn
Why apps-succeed-wpr-mastercode.vnWhy apps-succeed-wpr-mastercode.vn
Why apps-succeed-wpr-mastercode.vn
 
Dzone performancemonitoring2016-mastercode.vn
Dzone performancemonitoring2016-mastercode.vnDzone performancemonitoring2016-mastercode.vn
Dzone performancemonitoring2016-mastercode.vn
 
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vn
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vnGoogle công bố thông tin lịch xu hướng ngành 2017 mastercode.vn
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vn
 
Nghiên cứu về khách hàng mastercode.vn
Nghiên cứu về khách hàng mastercode.vnNghiên cứu về khách hàng mastercode.vn
Nghiên cứu về khách hàng mastercode.vn
 
Lập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnLập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vn
 
Pd fbuoi7 8--tongquanseo-mastercode.vn
Pd fbuoi7 8--tongquanseo-mastercode.vnPd fbuoi7 8--tongquanseo-mastercode.vn
Pd fbuoi7 8--tongquanseo-mastercode.vn
 
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vn
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vnPd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vn
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vn
 
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vn
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vnPdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vn
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vn
 
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vn
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vnPd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vn
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vn
 
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vn
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vnPd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vn
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vn
 
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vn
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vnPd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vn
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vn
 
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vn
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vnPdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vn
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vn
 
Pdfbài 7 máy tính xác tay và máy in bảo trì sự cố máy tính-mastercode.vn
Pdfbài 7 máy tính xác tay và máy in   bảo trì sự cố máy tính-mastercode.vnPdfbài 7 máy tính xác tay và máy in   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 7 máy tính xác tay và máy in bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 6 bảo trì máy tính bảo trì sự cố máy tính-mastercode.vn
Pdfbài 6 bảo trì máy tính   bảo trì sự cố máy tính-mastercode.vnPdfbài 6 bảo trì máy tính   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 6 bảo trì máy tính bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 5 bảo trì và tối ưu windows bảo trì sự cố máy tính-mastercode.vn
Pdfbài 5 bảo trì và tối ưu windows   bảo trì sự cố máy tính-mastercode.vnPdfbài 5 bảo trì và tối ưu windows   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 5 bảo trì và tối ưu windows bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 4 ổ cứng hard drive bảo trì sự cố máy tính-mastercode.vn
Pdfbài 4 ổ cứng hard drive   bảo trì sự cố máy tính-mastercode.vnPdfbài 4 ổ cứng hard drive   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 4 ổ cứng hard drive bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 3 cpu và ram bảo trì sự cố máy tính-mastercode.vn
Pdfbài 3 cpu và ram   bảo trì sự cố máy tính-mastercode.vnPdfbài 3 cpu và ram   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 3 cpu và ram bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 1 giới thiệu chung về phần cứng bảo trì sự cố máy tính-mastercode.vn
Pdfbài 1 giới thiệu chung về phần cứng   bảo trì sự cố máy tính-mastercode.vnPdfbài 1 giới thiệu chung về phần cứng   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 1 giới thiệu chung về phần cứng bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 2 bo mạch chủ (main) bảo trì sự cố máy tính-mastercode.vn
Pdfbài 2 bo mạch chủ (main)   bảo trì sự cố máy tính-mastercode.vnPdfbài 2 bo mạch chủ (main)   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 2 bo mạch chủ (main) bảo trì sự cố máy tính-mastercode.vn
 

Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao diện - Lập trình winform - Giáo trình FPT

  • 1. Bài 4: LẬP TRÌNH VỚI CSDL ADO.NET & KIẾN TRÚC KHÔNG KẾT NỐI & LẬP TRÌNH GIAO DIỆN
  • 2. Các nhóm điều khiển trên form Các điều khiển thường dùng Các điều khiển chứa Các điều khiển menu Các điều khiển dữ liệu Các thành phần Các điều khiển hỗ trợ in Các điều khiển hộp thoại Sự kiện và xử lý sự kiện trong C# Hệ thống bài cũ Các nhóm điều khiển trên form Các điều khiển thường dùng Các điều khiển chứa Các điều khiển menu Các điều khiển dữ liệu Các thành phần Các điều khiển hỗ trợ in Các điều khiển hộp thoại Sự kiện và xử lý sự kiện trong C# Lập trình giao diện - ứng dụng gồm nhiều form 2
  • 3. Mục tiêu bài học Giới thiệu về ADO.NET Các thành phần của ADO.NET DataProvider DataSet Các loại DataProvider Sql Data Provider SqlConnection SqlDataAdapter Ứng dụng nhiều form Ứng dụng SDI Ứng dụng MDI Thêm Toolbar, Tooltip vào form Giới thiệu về ADO.NET Các thành phần của ADO.NET DataProvider DataSet Các loại DataProvider Sql Data Provider SqlConnection SqlDataAdapter Ứng dụng nhiều form Ứng dụng SDI Ứng dụng MDI Thêm Toolbar, Tooltip vào form Lập trình giao diện - ứng dụng gồm nhiều form 3
  • 4. ADO.NET (ActiveX Data Objects .NET) là một thành phần trong .NET Framework đảm nhiệm vai trò thao tác với CSDL ADO.NET ADO.NET (ActiveX Data Objects .NET) là một thành phần trong .NET Framework đảm nhiệm vai trò thao tác với CSDL Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 4
  • 5. ADO.NET là cầu nối giữa ứng dụng và CSDL ADO.NET hỗ trợ các lập trình viên kết nối với hệ quản trị CSDL như SQL Server, Microsoft Access, Oracle… ADO.NET ADO.NET là cầu nối giữa ứng dụng và CSDL ADO.NET hỗ trợ các lập trình viên kết nối với hệ quản trị CSDL như SQL Server, Microsoft Access, Oracle… Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 5
  • 6. Hỗ trợ lập trình Cung cấp các lớp thao tác với CSDL giúp lập trình viên lập trình nhanh hơn và giảm bớt lỗi Cung cấp các công cụ để thao tác với CSDL ngay trên phần Designer giúp lập trình viên tương tác với CSDL mà không cần hiểu sâu về CSDL Khả năng mở rộng Sử dụng kiến trúc không kết nối chỉ kết nối với dữ liệu lúc khi cần thiết nên giảm tải cho server CSDL  Ứng dụng có thể đáp ứng nhiều người dùng hơn Khả năng tích hợp ADO.NET có thể gửi dữ liệu cho bất cứ ứng dụng nào hỗ trợ XML Tính năng của ADO.NET Hỗ trợ lập trình Cung cấp các lớp thao tác với CSDL giúp lập trình viên lập trình nhanh hơn và giảm bớt lỗi Cung cấp các công cụ để thao tác với CSDL ngay trên phần Designer giúp lập trình viên tương tác với CSDL mà không cần hiểu sâu về CSDL Khả năng mở rộng Sử dụng kiến trúc không kết nối chỉ kết nối với dữ liệu lúc khi cần thiết nên giảm tải cho server CSDL  Ứng dụng có thể đáp ứng nhiều người dùng hơn Khả năng tích hợp ADO.NET có thể gửi dữ liệu cho bất cứ ứng dụng nào hỗ trợ XML Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 6
  • 7. Kiến trúc không kết nối Kết nối được thiết lập và tạo một bản sao của CSDL ngay trên máy tính, sau đó kết nối được đóng Thao tác với bản sao và update lại CSDL khi cần thiết Ưu điểm Tiết kiệm tài nguyên Bảo mật vì kết nối được mở trong thời gian ngắn Kiến trúc không kết nối Kiến trúc không kết nối Kết nối được thiết lập và tạo một bản sao của CSDL ngay trên máy tính, sau đó kết nối được đóng Thao tác với bản sao và update lại CSDL khi cần thiết Ưu điểm Tiết kiệm tài nguyên Bảo mật vì kết nối được mở trong thời gian ngắn Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 7
  • 8. ADO gồm hai phần .NET data provider: cung cấp các lớp để kết nối, thực thi lệnh SQL trên CSDL và lấy kết quả trả về Dataset: lưu trữ bản sao của CSDL trên bộ nhớ. Cung cấp các phương thức cho phép ứng dụng thao tác với bản sao Các thành phần chính của ADO.NET ADO gồm hai phần .NET data provider: cung cấp các lớp để kết nối, thực thi lệnh SQL trên CSDL và lấy kết quả trả về Dataset: lưu trữ bản sao của CSDL trên bộ nhớ. Cung cấp các phương thức cho phép ứng dụng thao tác với bản sao Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 8
  • 9. Data provider cung cấp các lớp để tương tác với CSDL Data provider gồm 4 thành phần chính Connection: kết nối với CSDL Command: thực thi các lệnh sql để lấy dữ liệu từ CSDL hoặc thay đổi CSDL DataReader: đọc dữ liệu tuần tự từ CSDL DataAdapter: lấy dữ liệu từ CSDL lưu vào dataset và cập nhật CSDL Data provider Data provider cung cấp các lớp để tương tác với CSDL Data provider gồm 4 thành phần chính Connection: kết nối với CSDL Command: thực thi các lệnh sql để lấy dữ liệu từ CSDL hoặc thay đổi CSDL DataReader: đọc dữ liệu tuần tự từ CSDL DataAdapter: lấy dữ liệu từ CSDL lưu vào dataset và cập nhật CSDL Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 9
  • 10. Ví dụ thực tiễn Vấn đề: Một ngân hàng đa quốc gia có rất nhiều chi nhánh. Giả sử một chi nhánh ở Việt Nam muốn truy cập thông tin. Giải pháp: Lấy thông tin cần thiết và lưu vào máy cục bộ dưới dạng dataset Dataset là bản sao của CSDL hay một phần CSDL trên bộ nhớ DataSet Hỗ trợ kiến trúc không kết nối Kết nối đến CSDL chỉ được mở khi lấy dữ liệu về dataset và cập nhật dữ liệu trở lại CSDL Mọi thao tác sẽ được thực hiện trên DataSet DataSet không phụ thuộc vào loại CSDL Dataset Ví dụ thực tiễn Vấn đề: Một ngân hàng đa quốc gia có rất nhiều chi nhánh. Giả sử một chi nhánh ở Việt Nam muốn truy cập thông tin. Giải pháp: Lấy thông tin cần thiết và lưu vào máy cục bộ dưới dạng dataset Dataset là bản sao của CSDL hay một phần CSDL trên bộ nhớ DataSet Hỗ trợ kiến trúc không kết nối Kết nối đến CSDL chỉ được mở khi lấy dữ liệu về dataset và cập nhật dữ liệu trở lại CSDL Mọi thao tác sẽ được thực hiện trên DataSet DataSet không phụ thuộc vào loại CSDL Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 10
  • 11. Cấu trúc của DataSet giống hệt cấu trúc của cơ sở dữ liệu Mỗi dataset gồm nhiều bảng Các bảng có ràng buộc với nhau Mỗi bảng có nhiều dòng và cột Mỗi cột có nhiều dòng Mỗi dòng có nhiều cột DataSet Cấu trúc của DataSet giống hệt cấu trúc của cơ sở dữ liệu Mỗi dataset gồm nhiều bảng Các bảng có ràng buộc với nhau Mỗi bảng có nhiều dòng và cột Mỗi cột có nhiều dòng Mỗi dòng có nhiều cột Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 11
  • 12. DataAdapter kết nối với CSDL thông qua Connection, lấy dữ liệu lưu vào DataSet. Ứng dụng sẽ lấy và thay đổi dữ liệu trên DataSet DataAdapter kết nối với CSDL thông qua Connection và cập nhật lại CSDL Kiến trúc không kết nối Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 12
  • 13. Các data provider được đặt trong các namespace khác nhau Các lớp cho các data provider Các loại Data provider Provider Namespace SQL Server System.Data.SqlClient OLE DB System.Data.OleDb ODBC System.Data.Odbc Oracle System.Data.OracleClient Các data provider được đặt trong các namespace khác nhau Các lớp cho các data provider Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 13 Oracle System.Data.OracleClient Object SQL Server OLE DB ODBC Oracle Connection SqlConnection OleDbConnection OdbcConnection OracleConnection Command SqlCommand OleDbCommand OdbcCommand OracleCommand Data reader SqlDataReader OldeDbDataReader OdbcDataReader OracleDataReader Data adapter SqlDataAdapter OleDbDataAdapter OdbcDataAdapter OracleDataAdapter
  • 14. Các lớp của các loại data provider về cơ bản giống nhau vì cùng kế thừa từ một lớp Ví dụ OleDbDataAdpater và SqlDataAdapter cùng kế thừa từ lớp DbDataAdapter Với môn này sẽ học về SQL data provider để thao tác với CSDL Microsoft SQL Server 2008 Các loại Data provider Các lớp của các loại data provider về cơ bản giống nhau vì cùng kế thừa từ một lớp Ví dụ OleDbDataAdpater và SqlDataAdapter cùng kế thừa từ lớp DbDataAdapter Với môn này sẽ học về SQL data provider để thao tác với CSDL Microsoft SQL Server 2008 Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 14
  • 15. Thực hiện kết nối với CSDL Phương thức khởi tạo Thuộc tính và phương thức Các giá trị trên chuỗi kết nối SqlConnection new SqlConnection() new SqlConnection(chuỗi-kết-nối) Thuộc tính/Phương thức Mô tả ConnectionString Cung cấp thông tin để truy cập đến CSDL SQL Server Thực hiện kết nối với CSDL Phương thức khởi tạo Thuộc tính và phương thức Các giá trị trên chuỗi kết nối Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 15 ConnectionString Cung cấp thông tin để truy cập đến CSDL SQL Server Open() Mở kết nối Close() Đóng kết nối Giá trị Mô tả Data source/Server Tên Server CSDL Initial catalog/DataBase Tên của CSDL UserID Tên của user đăng nhập vào CSDL
  • 16. DataAdapter hoạt động như cầu nối giữa dataset và CSDL SqlDataAdapter Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 16
  • 17. Phương thức khởi tạo Thuộc tính SqlDataAdapter new SqlDataAdapter() new SqlDataAdapter(lệnh-truy-vấn, Connection) Thuộc tính Mô tả DeleteCommand Lệnh sql hoặc sp để xóa dữ liệu từ dataset Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 17 DeleteCommand Lệnh sql hoặc sp để xóa dữ liệu từ dataset SelectCommand Lệnh sql hoặc sp để lấy dữ liệu từ dataset InsertCommand Lệnh sql hoặc sp để thêm dữ liệu vào dataset UpdateCommand Lệnh sql hoặc sp để cập nhật dữ liệu cho dataset
  • 18. Phương thức SqlDataAdapter Phương thức Mô tả Fill (dataset) Lấy dữ liệu đổ vào dataset Update(dataset) Cập nhật những dữ liệu thay đổi trên dataset lên CSDL Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 18
  • 19. Sử dụng phương thức DataAdapter để fill Dataset Đọc dữ liệu vào form từ Dataset Thay đổi dữ liệu trên Dataset Update lại dữ liệu trên CSDL Demo thao tác với dữ liệu bằng kiến trúc không kết nối Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 19
  • 20. Các bước thực hiện Lập trình cơ sở dữ liệu 1. Khai báo các biến SqlConnection conn; // biến connection kết nối đến CSDL SqlCommand com; // thực thi các lệnh sql để lấy dữ liệu từ hoặc là thay //đổi CSDL SqlDataAdapter da; // biến có kiểu DataSet ds; // biến dataset 2. Khởi tạo biến conn = new SqlConnection("Data Source=localhost; Initial Catalog=ProductDB;Persist Security Info=True;User ID=sa;Password=sa"); conn.Open(); // Thực hiện mở kết nối đến CSDL da = new SqlDataAdapter(); ds = new DataSet(); com = new SqlCommand("Select * from Products", conn); // thực hiện truy vấn CSDL da.SelectCommand = com; da.Fill(ds, "Products"); // Đưa kết quả câu lệnh truy vấn vào dataset Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 20 2. Khởi tạo biến conn = new SqlConnection("Data Source=localhost; Initial Catalog=ProductDB;Persist Security Info=True;User ID=sa;Password=sa"); conn.Open(); // Thực hiện mở kết nối đến CSDL da = new SqlDataAdapter(); ds = new DataSet(); com = new SqlCommand("Select * from Products", conn); // thực hiện truy vấn CSDL da.SelectCommand = com; da.Fill(ds, "Products"); // Đưa kết quả câu lệnh truy vấn vào dataset 3. Lấy 1 dòng dữ liệu trong bảng ds.Tables[0].Rows.Count; // trả về tổng số bản ghi ds.Tables[0].Rows[i].ItemArray[j].ToString() // Lấy cột thứ J của hàng thứ i
  • 21. Demo load dữ liệu vào ListView private void frmBookDetails_Load(object sender, EventArgs e) { com = new SqlCommand("Select * from Products",conn); da.SelectCommand = com; da.Fill(ds, "Products"); for (rows = 0; rows < ds.Tables[0].Rows.Count; rows++) { lvwBookDetails.Items.Add(ds.Tables[0].Rows[rows].ItemArray[0].ToString()); //thêm vào cột thứ nhất lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[1].ToString()); lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[2].ToString()); lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[3].ToString()); } } Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 21 private void frmBookDetails_Load(object sender, EventArgs e) { com = new SqlCommand("Select * from Products",conn); da.SelectCommand = com; da.Fill(ds, "Products"); for (rows = 0; rows < ds.Tables[0].Rows.Count; rows++) { lvwBookDetails.Items.Add(ds.Tables[0].Rows[rows].ItemArray[0].ToString()); //thêm vào cột thứ nhất lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[1].ToString()); lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[2].ToString()); lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[3].ToString()); } }
  • 22. Demo hiển thị dữ liệu khi một dòng trên ListView được chọn private void lvwBookDetails_Click(object sender, EventArgs e) { int index = lvwBookDetails.SelectedItems[0].Index; // Dòng được chọn DataRow dr = ds.Tables["Products"].Rows[index]; // Lấy dòng được chọn txtCode.Text = dr[0].ToString(); txtTitle.Text = dr[1].ToString(); txtPrice.Text = dr[2].ToString(); txtQuantity.Text = dr[3].ToString(); } Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 22 private void lvwBookDetails_Click(object sender, EventArgs e) { int index = lvwBookDetails.SelectedItems[0].Index; // Dòng được chọn DataRow dr = ds.Tables["Products"].Rows[index]; // Lấy dòng được chọn txtCode.Text = dr[0].ToString(); txtTitle.Text = dr[1].ToString(); txtPrice.Text = dr[2].ToString(); txtQuantity.Text = dr[3].ToString(); }
  • 23. ỨNG DỤNG GỒM NHIỀU FORM Lập trình giao diện - ứng dụng gồm nhiều form 23 ỨNG DỤNG GỒM NHIỀU FORM
  • 24. Ứng dụng Payment gồm 2 form Form Payment được mở khi nhấn vào button Select Payment trên form Customer Thao tác trên form Payment mới được thao tác trên form Customer Chạy thử ứng dụng Payment Lập trình giao diện - ứng dụng gồm nhiều form 24
  • 25. Có thể thêm một form mới hoặc một form có sẵn vào Project Thêm form vào Project Thêm một form mới Lập trình giao diện - ứng dụng gồm nhiều form 25 Thêm một form mới Thêm một form có sẵn
  • 26. Thêm form frmPayment và thiết kế như sau Demo thêm form Payment vào Project Lập trình giao diện - ứng dụng gồm nhiều form 26
  • 27. Khi ứng dụng nhiều form chạy, theo mặc định ứng dụng sẽ tải form được tạo đầu tiên trước Đối với ứng dụng nhiều form, với form này gọi form kia. Có thể lập trình viên muốn chạy từng form để kiểm thử từng form Hiển thị form đầu tiên của Project Lập trình giao diện - ứng dụng gồm nhiều form 27
  • 28. Thông tin về form được tải đầu tiên của project được lưu trong file Program.cs Demo hiển thị form đầu tiên của Project static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frmCustomer()); } Mặc định frmCustomer được load trước tiên Lập trình giao diện - ứng dụng gồm nhiều form 28 static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frmCustomer()); } static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frmPayment()); } frmPayment được load trước tiên
  • 29. Có hai cách hiển thị form mới Hiển thị theo kiểu dialog: Người dùng phải thao tác với form mới này trước tiên Hiển thị thông thường: Người dùng có thể thao tác với form tùy ý Cách hiển thị form mới B1. Sử dụng từ khóa new để tạo form mới B2. Sử dụng phương thức ShowDialog hoặc Show của form mới để hiển thị form Hiển thị form mới Có hai cách hiển thị form mới Hiển thị theo kiểu dialog: Người dùng phải thao tác với form mới này trước tiên Hiển thị thông thường: Người dùng có thể thao tác với form tùy ý Cách hiển thị form mới B1. Sử dụng từ khóa new để tạo form mới B2. Sử dụng phương thức ShowDialog hoặc Show của form mới để hiển thị form Lập trình giao diện - ứng dụng gồm nhiều form 29 Form paymentForm = new frmPayment(); paymentForm.ShowDialog(); //Hiển thị form dialog paymentForm.Show(); //Hiển thị form thông thường
  • 30. Demo hiển thị form Payment khi người dùng nhấn vào button Select Payment trên form Customer Demo hiển thị form Payment private void btnSelectPayment_Click(object sender, System.EventArgs e) { Form paymentForm = new frmPayment(); DialogResult selectedButton = paymentForm.ShowDialog(); } Lập trình giao diện - ứng dụng gồm nhiều form 30 private void btnSelectPayment_Click(object sender, System.EventArgs e) { Form paymentForm = new frmPayment(); DialogResult selectedButton = paymentForm.ShowDialog(); }
  • 31. DialogResult result = MessageBox.Show("Bạn muốn xóa không", "Xóa", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (result==DialogResult.OK) { //Đoạn mã xóa dữ liệu } Form Dialog được tạo sẵn Form Dialog tự tạo Xử lý sự kiện cho các button trên form dialog tự tạo Thiết lập giá trị cho thuộc tính DialogResult Lấy phản hồi của người dùng từ Dialog Form Dialog được tạo sẵn Form Dialog tự tạo Xử lý sự kiện cho các button trên form dialog tự tạo Thiết lập giá trị cho thuộc tính DialogResult Lập trình giao diện - ứng dụng gồm nhiều form 31 this.DialogResult = DialogResult.OK;
  • 32. Form Payment Form Customer Demo lấy phản hồi từ form Payment private void btnOK_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; } private void btnCancel_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; } Form Payment Form Customer Lập trình giao diện - ứng dụng gồm nhiều form 32 private void btnCancel_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; } private void btnSelectPayment_Click(object sender, System.EventArgs { Form paymentForm = new frmPayment(); DialogResult selectedButton = paymentForm.ShowDialog(); if (selectedButton == DialogResult.OK) { MessageBox.Show("Bạn vừa chọn OK"); } }
  • 33. Form cung cấp thuộc tính Tag để lưu đối tượng chứa dữ liệu của form Cũng có thể tự khai báo thuộc tính bất kỳ để lưu dữ liệu cho form và truyền cho form khác bằng cách truy cập đến thuộc tính đó trên form khác Truyền dữ liệu giữa các form Lập trình giao diện - ứng dụng gồm nhiều form 33
  • 34. Form Payment Form Customer Demo truyền dữ liệu từ form Payment cho form Customer private void btnOK_Click(object sender, EventArgs e) { string msg = null; //Đoạn mã gán dữ liệu của form cho biến msg //… this.Tag = msg; this.DialogResult = DialogResult.OK; } Form Payment Form Customer Lập trình giao diện - ứng dụng gồm nhiều form 34 private void btnOK_Click(object sender, EventArgs e) { string msg = null; //Đoạn mã gán dữ liệu của form cho biến msg //… this.Tag = msg; this.DialogResult = DialogResult.OK; } private void btnSelectPayment_Click(object sender, System.EventArgs e) { Form paymentForm = new frmPayment(); DialogResult selectedButton = paymentForm.ShowDialog(); if (selectedButton == DialogResult.OK) { lblPayment.Text = (string) paymentForm.Tag; } }
  • 35. Sự kiện xẩy ra khi người dùng nhấn vào button gọi đến phương thức Close của form nhưng trước khi form được đóng thực sự Sự kiện này thường được dùng để ngăn người dùng đóng form chứa dữ liệu chưa được lưu Nếu muốn đóng form, thiết lập e.Cancel = false (mặc định) Nếu muốn hủy lệnh đóng form, thiết lập e.Cancel = true Sự kiện FormClosing private void frmCustomer_FormClosing(object sender, FormClosingEventArgs e) { //Viết mã ở đây } Sự kiện xẩy ra khi người dùng nhấn vào button gọi đến phương thức Close của form nhưng trước khi form được đóng thực sự Sự kiện này thường được dùng để ngăn người dùng đóng form chứa dữ liệu chưa được lưu Nếu muốn đóng form, thiết lập e.Cancel = false (mặc định) Nếu muốn hủy lệnh đóng form, thiết lập e.Cancel = true Lập trình giao diện - ứng dụng gồm nhiều form 35 private void frmCustomer_FormClosing(object sender, FormClosingEventArgs e) { //Viết mã ở đây }
  • 36. Demo xử lý sự kiện FormClosing cho frmCustomer private void frmCustomer_FormClosing(object sender, FormClosingEventArgs e) { if (isDataSaved == false) { string message = "This form contains unsaved data.nn" + "Do you want to save it?"; DialogResult button = MessageBox.Show(message, "Customer", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); if (button == DialogResult.Yes) { //Đoạn mã lưu dữ liệu } if (button == DialogResult.Cancel) { e.Cancel = true; } } } Lập trình giao diện - ứng dụng gồm nhiều form 36 private void frmCustomer_FormClosing(object sender, FormClosingEventArgs e) { if (isDataSaved == false) { string message = "This form contains unsaved data.nn" + "Do you want to save it?"; DialogResult button = MessageBox.Show(message, "Customer", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); if (button == DialogResult.Yes) { //Đoạn mã lưu dữ liệu } if (button == DialogResult.Cancel) { e.Cancel = true; } } }
  • 37. Ứng dụng SDI (single document interface – giao diện đơn tài liệu) là ứng dụng gồm nhiều form độc lập với nhau mỗi form có thể có menu và toolbar riêng mỗi form chạy trên một cửa sổ riêng Với loại ứng dụng này cần có một form chính cung cấp truy cập đến các form khác của ứng dụng Ứng dụng SDI Ứng dụng SDI (single document interface – giao diện đơn tài liệu) là ứng dụng gồm nhiều form độc lập với nhau mỗi form có thể có menu và toolbar riêng mỗi form chạy trên một cửa sổ riêng Với loại ứng dụng này cần có một form chính cung cấp truy cập đến các form khác của ứng dụng Lập trình giao diện - ứng dụng gồm nhiều form 37
  • 38. Chạy thử ứng dụng SDI Financial Calculation Lập trình giao diện - ứng dụng gồm nhiều form 38 Form chính
  • 39. Gọi đến form frmFutureValue khi nhấn vào button Calculate Future Value trên form frmMain Gọi đến form frmDepreciation khi nhấn vào button Calculate SYD Depreciation trên form frmMain Demo gọi đến các form từ form chính private void btnFutureValue_Click(object sender, System.EventArgs e) { Form newForm = new frmFutureValue(); newForm.Show(); } Gọi đến form frmFutureValue khi nhấn vào button Calculate Future Value trên form frmMain Gọi đến form frmDepreciation khi nhấn vào button Calculate SYD Depreciation trên form frmMain Lập trình giao diện - ứng dụng gồm nhiều form 39 private void btnFutureValue_Click(object sender, System.EventArgs e) { Form newForm = new frmFutureValue(); newForm.Show(); } private void btnCalculateDepreciation_Click(object sender, System.Event { Form newForm = new frmDepreciation(); newForm.Show(); }
  • 40. Đóng tất cả các form (khi người dùng nhấn vào button Exit của form chính) Đóng từng form (khi người dùng nhấn vào button Close của từng form) Demo đóng form private void btnExit_Click(object sender, System.EventArgs e) { Application.Exit(); } Đóng tất cả các form (khi người dùng nhấn vào button Exit của form chính) Đóng từng form (khi người dùng nhấn vào button Close của từng form) Lập trình giao diện - ứng dụng gồm nhiều form 40 private void btnClose_Click(object sender, EventArgs e) { this.Close(); }
  • 41. Có thể sử dụng điều khiển Tab thay cho kiểu giao diện SDI Mỗi điều khiển Tab có nhiều page, có thể thêm và xóa các page này Sử dụng thuộc tính SelectedIndex để xác định tab nào đang được focus Sử dụng Tab Có thể sử dụng điều khiển Tab thay cho kiểu giao diện SDI Mỗi điều khiển Tab có nhiều page, có thể thêm và xóa các page này Sử dụng thuộc tính SelectedIndex để xác định tab nào đang được focus Lập trình giao diện - ứng dụng gồm nhiều form 41
  • 42. Xử lý sự kiện cho button Calculate Xử lý sự kiện SelectedIndexChanged của điều khiển Tab Demo sử dụng điều khiển Tab private void btnCalculate_Click(object sender, System.EventArgs e) { if (tabCalculations.SelectedIndex == 0) DisplayFutureValue(); else if (tabCalculations.SelectedIndex == 1) DisplayDepreciation(); } Xử lý sự kiện cho button Calculate Xử lý sự kiện SelectedIndexChanged của điều khiển Tab Lập trình giao diện - ứng dụng gồm nhiều form 42 private void btnCalculate_Click(object sender, System.EventArgs e) { if (tabCalculations.SelectedIndex == 0) DisplayFutureValue(); else if (tabCalculations.SelectedIndex == 1) DisplayDepreciation(); } private void tabCalculations_SelectedIndexChanged(object sender, EventArgs e) { if (tabCalculations.SelectedIndex == 0) txtMonthlyInvestment.Focus(); else if (tabCalculations.SelectedIndex == 1) txtInitialCost.Focus(); }
  • 43. MDI (multiple-document interface – giao diện đa tài liệu) là giao diện có một form cha chứa nhiều form con Sử dụng menu trên form cha để có thể truy cập đến các form con Ứng dụng MDI Lập trình giao diện - ứng dụng gồm nhiều form 43
  • 44. Chạy thử ứng dụng MDI Financial Calculations Lập trình giao diện - ứng dụng gồm nhiều form 44
  • 45. Trong cửa sổ Properties, thiết lập thuộc tính IsMdiContainer của form là true Tạo form cha Lập trình giao diện - ứng dụng gồm nhiều form 45
  • 46. Viết code thiết lập thuộc tính MdiParent chỉ ra form cha cho form con Đoạn mã này mở form FutureValue khi người dùng nhấn vào menu New Future Value trên form cha Tạo form con private void mnuNewFutureValue_Click(object sender, System.EventArgs e) { Form newForm = new frmFutureValue(); newForm.MdiParent = this; newForm.Show(); } Lập trình giao diện - ứng dụng gồm nhiều form 46 private void mnuNewFutureValue_Click(object sender, System.EventArgs e) { Form newForm = new frmFutureValue(); newForm.MdiParent = this; newForm.Show(); }
  • 47. Sử dụng thuộc tính ActiveMdiChild để lấy tham chiếu đến form con đang được kích hoạt Đóng form con đang được kích hoạt private void mnuClose_Click(object sender, System.EventArgs e) { Form activeForm = this.ActiveMdiChild; if (activeForm != null) activeForm.Close(); } Sử dụng thuộc tính ActiveMdiChild để lấy tham chiếu đến form con đang được kích hoạt Lập trình giao diện - ứng dụng gồm nhiều form 47 private void mnuClose_Click(object sender, System.EventArgs e) { Form activeForm = this.ActiveMdiChild; if (activeForm != null) activeForm.Close(); }
  • 48. Sử dụng phương thức LayoutMdi(KieuLayOut) để sắp xếp các form con Có các kiểu sắp xếp như Cascade, TileVertical, TileHorizontal… Sắp xếp các form con private void mnuCascade_Click(object sender, System.EventArgs e) { this.LayoutMdi(MdiLayout.Cascade); } Lập trình giao diện - ứng dụng gồm nhiều form 48 private void mnuCascade_Click(object sender, System.EventArgs e) { this.LayoutMdi(MdiLayout.Cascade); }
  • 49. Thiết lập thuộc tính MDIWindowListItem của điều khiển MenuStrip cho menu muốn hiển thị Hiển thị danh sách của tất cả các form con đang được mở Lập trình giao diện - ứng dụng gồm nhiều form 49
  • 50. Thêm menu riêng cho mỗi form con Thêm menu riêng cho form con giống như thêm menu cho form thông thường Menu này sẽ được thêm vào sau thanh menu của form cha khi menu con được kích hoạt NÂNG CẤP ỨNG DỤNG FINANCIAL CALCULATION Lập trình giao diện - ứng dụng gồm nhiều form 50
  • 51. Toolbar được dùng để chứa các công cụ cho form Sử dụng điều khiển ToolStrip Thêm Toolbar Toolbar được dùng để chứa các công cụ cho form Sử dụng điều khiển ToolStrip Lập trình giao diện - ứng dụng gồm nhiều form 51 ToolStrip ToolStrip
  • 52. Có thể thêm Toolbar tiêu chuẩn hoặc Toolbar tùy chỉnh Demo Thêm Toolbar Lập trình giao diện - ứng dụng gồm nhiều form 52 Tạo Toolbar tiêu chuẩn Tạo Toolbar tùy chỉnh
  • 53. Thêm Tool vào Toolbar B1. Chọn kiểu Tool B2. Thêm Tool B3. Thiết lập ảnh đại diện cho Tool Lập trình giao diện - ứng dụng gồm nhiều form 53 B4. Thiết lập văn bản giải thích mục đích của Tool
  • 54. Nhấn vào button đầu tiên trên Toolbar để hiển thị form Future Value Demo thêm Toolbar Lập trình giao diện - ứng dụng gồm nhiều form 54 //Hoặc là
  • 55. Tooltip được sử dụng để giải thích ý nghĩa cho các điều khiển trên form khi người dùng di chuột lên điều khiển Khi thêm Tooltip vào form (theo mặc định có tên là toolTip1), tất cả điều khiển đều có thêm thuộc tính Tooltip on toolTip1 Thiết lập giá trị cho thuộc tính này cho mỗi điều khiển hoặc cho form Thêm Tooltip Tooltip được sử dụng để giải thích ý nghĩa cho các điều khiển trên form khi người dùng di chuột lên điều khiển Khi thêm Tooltip vào form (theo mặc định có tên là toolTip1), tất cả điều khiển đều có thêm thuộc tính Tooltip on toolTip1 Thiết lập giá trị cho thuộc tính này cho mỗi điều khiển hoặc cho form Lập trình giao diện - ứng dụng gồm nhiều form 55 Thuộc tính ToolTip on toolTip1 được thêm vào các điều khiển
  • 56. Trợ giúp theo ngữ cảnh sẽ hiển thị văn bản trợ giúp cho điều khiển được focus khi người dùng nhấn F1 Trợ giúp theo ngữ cảnh Khi thêm HelpProvider vào form (theo mặc định có tên là helpProvider1), tất cả điều khiển đều có thêm thuộc tính HelpString on helpProvider1 Lập trình giao diện - ứng dụng gồm nhiều form 56 Thuộc tính HelpString on helpProvider1 được thêm vào các điều khiển Khi thêm HelpProvider vào form (theo mặc định có tên là helpProvider1), tất cả điều khiển đều có thêm thuộc tính HelpString on helpProvider1 Thiết lập giá trị cho thuộc tính này cho mỗi điều khiển hoặc cho form
  • 57. Tổng kết bài học ADO.NET gồm hai phần data provider và dataset .NET data provider cung cấp các lớp để kết nối, thực thi lệnh SQL và lấy kết quả trả về Dataset lưu trữ bản sao của CSDL hoặc một phần CSDL trên bộ nhớ. Cung cấp các phương thức cho phép ứng dụng thao tác với bản sao Data provider gồm 4 thành phần chính là Connection, Command, DataReader và DataAdapter Command và DataReader thực hiện theo kiến trúc kết nối, nên phải mở và đóng kết nối trước vào sau khi thao tác DataAdapter thực hiện theo cơ chế không kết nối, đối tượng này tự động mở và đóng kết nối khi cần thiết ADO.NET gồm hai phần data provider và dataset .NET data provider cung cấp các lớp để kết nối, thực thi lệnh SQL và lấy kết quả trả về Dataset lưu trữ bản sao của CSDL hoặc một phần CSDL trên bộ nhớ. Cung cấp các phương thức cho phép ứng dụng thao tác với bản sao Data provider gồm 4 thành phần chính là Connection, Command, DataReader và DataAdapter Command và DataReader thực hiện theo kiến trúc kết nối, nên phải mở và đóng kết nối trước vào sau khi thao tác DataAdapter thực hiện theo cơ chế không kết nối, đối tượng này tự động mở và đóng kết nối khi cần thiết
  • 58. Một ứng dụng có thể bao gồm nhiều form. Từ một form có thể mở form mới theo kiểu form thông thường hoặc dialog Đối với form dialog, khi mở form có giá trị trả về kiểu DialogResult cho biết thao tác của người dùng trên form Ứng dụng SDI gồm nhiều form độc lập với nhau, mỗi form có thể có menu và toolbar riêng và mỗi form chạy trên một cửa sổ riêng Ứng dụng SDI này cần có một form chính cung cấp truy cập đến các form khác của ứng dụng Ứng dụng MDI là giao diện có một form cha chứa nhiều form con Tổng kết bài học Một ứng dụng có thể bao gồm nhiều form. Từ một form có thể mở form mới theo kiểu form thông thường hoặc dialog Đối với form dialog, khi mở form có giá trị trả về kiểu DialogResult cho biết thao tác của người dùng trên form Ứng dụng SDI gồm nhiều form độc lập với nhau, mỗi form có thể có menu và toolbar riêng và mỗi form chạy trên một cửa sổ riêng Ứng dụng SDI này cần có một form chính cung cấp truy cập đến các form khác của ứng dụng Ứng dụng MDI là giao diện có một form cha chứa nhiều form con Lập trình giao diện - ứng dụng gồm nhiều form 58