Nối tiếp phần 1, phần 2 của Giáo trình C# 2005 - Tập 4, Quyển 2: Lập trình cơ sở dữ liệu, report, visual sourcesafe 2005 tiếp tục cung cấp cho học viên các kiến thức về đối tượng DataGridView và ADO.NET, làm việc với Report và Crystal Report, làm việc với Visual SourceSafe 2005, Visual Studio 2005 và Visual SourceSafe 2005, ứng dụng quản lý nhân sự và tiền lương,... Mời các bạn cùng tham khảo chi tiết nội dung giáo trình!
Trang 1
NHÀ XUẤT BAN LAO ĐỘNG XÃ HỘI
Trang 2Chương 4: Đối tượng DataGridView và ADO.NET 173 [MỊ°
Trong những chương trước, bạn đã tìm hiểu cách khai báo
uò sử dụng điều khién DataGridView dé trinh bày dữ liệu từ đối
tượng DataSet, DataTuble uà DataVieu
Trong chương này, bạn sẽ tiếp tục tìm hiểu cách trình bày
dữ liệu dưới nhiều hình thức từ đối tượng DataSet, DataToble,
DataView bang déi tugng DataGridView, BindingSource và
Thêm điều khiển khúc uào DataGridView
Đối tượng BindingSource
Đối tượng BindingNauigdtor
Khai báo phương thức sử dụng chung
1 ĐỐI TƯỢNG DATAGRIDVIEW
Déi tugng DataGridView dùng để trình bày dữ liệu có trong đối tượng
DataSet, DataTable, DataView duéi hình thức khác nhau
Ngoài ra, bạn có thể định nghĩa các cột trên điểu khiển
DataGridView va thém cdc diéu khién nhu: Button, TextBox, ComboBox,
CheckBox, Image, Link
Trang 3
Chương 4: Đối tượng DataGridView và ADO.NET
1.1 Thuộc tính
Trong những chương trước, chúng ta đã làm quen với thuộc tính
DataSource ding để điền dữ liéu.tu déi tugng DataSet, DataTable, DataView vao diéu khién DataGridView
1.1.1 Thuéc tinh DataSource
Để sử dung thuéc tinh DataSource, ban khai bdo doan chuong trình
dé goi phuong thie FillDataSet trong lép Databases va dién di tugng DataSet vao diéu khién DataGridView nhu vi du 4-1
i du 4-1: DataGridView va DataSet
private void buttonl_Click (object sender, EventArgs e)
{
DataSet dataSet =cls.FillDataSet (
"select * from tblContracts",
Khi thực thi, ban nhan vao nut DataSet thì dữ liệu trong bảng
tblContracts cia co sé dữ liệu HRSQL trình bày như hình 4-1
Trang 4
Chương 4: Đối tượng DataGridView và ADO.NET 175
Tương tự, bạn có thể gọi phương thức #i11DatzTable từ lớp Databases
để điển đối tượng Dœz7abie vào đối tượng DœiaGridVieu như ví dụ 4-2
i du 4-2: DataGridView va DataTable
private void button2_Click(object sender, EventArgs e)
DataTable dataTable = cls FillDataTable(
"select FirstName, LastName, C.* from "+
" tblEmployees E, tblEducations C where "+
" E.EmployeeID=C.EmployeeID", CommandType.Text) ;
// Khai bdo gan déi tuong DataTable va thuéc tinh // DataSource ctia DataGridView
dataGridViewl DataSource = dataTable;
}
Khi thực thi, bạn nhấn vào nút Dœ¿ơTœbie thì dữ liệu trong bảng
tblEmpioyees và tbÌEducdtions của cơ sở dữ liệu HRSQL trình bày như
hình 4-2
i { LastName EducationID| School DTY-00014 | Hao 1 HEMU of Econo
Ton That Van DTY-00014 | Hao University of Nat
Le Van Tri Van DTY-00018 | Dung HCMU of Techn
Nguyen Thanh 'DTY-00020 iTu HCMU of Econo
- JLeVan DTY-33064 | Anh Polytechnic Univ
Le Quoc Van ADM-00036 | Hie Polytechnic Univ
Hinh 4-2: Trinh bay di liéu tu déi tuong DataTable
Ngoài ra, bạn có thể sử dụng đối tugng DataView để trích lọc dữ liệu
tix d6i tugng DataTable Dé lam điều này, bạn khai báo đoạn chương trình trong bién cé Click cia nit DataView nhu ví du 4-3
Trang 5Chương 4: Đối tượng DataGridView và ADO.NET
DataTable dataTable =cls.FillDataTable(
"select FirstName, LastName, C.* from" +
"tblEmployees E, tblExperiences C where"+
ˆ" E.EmployeeTD=C EmployeeTD", CommandType.Text) ;
11 Khai báo va khéi tao déi tuong DataView DataView dataView =
new DataView(dataTable) ; /I Khai báo gán đối tượng DataVieu uò thuộc tính L1 DataSource ctia DataGridView
dataGridViewl DataSource = dataView;
DTY-00014 HCMU oÍ Econo
Ton That Van DTY-00014 University of Nat
LeVanTri Van | DTY-00018 HCMU of Techn
Nguyen Thanh | DTY-00020 HCMU of Econo
Le Van DTY-33064 Polytechnic Univ
Le Quoc Van ADM-00036 | Hi Polytechnic Univ
Hình 4-3: Trình bày dữ liệu từ đối tueng DataView
Luu ý, trong ba ví dụ trên chúng ta có sử dụng biến c/s, bạn cần khai báo và khởi tạo déi tugng Databases trong bién cé Load cia Form nhu vi du
4-4,
Trang 6
Chương 4: Déi tugng DataGridView va ADO.NET 177
i du 4-4: Khai bao va khéi tao déi tugng Databases
L1 Khai bdo déi tugng Databases
Databases cls;
private void frmDataView_Load (
object sender, EventArgs e)
{
// Khéi tao déi tugng Databases cls = new Databases ();
1.1.2 Thuéc tinh CurrentRow
Để lấy ra mẩu tin đang chọn trên điều khiển DataGridView, ban có thể sử dụng thuộc tính CurrentRow Thuéc tinh CurrentRow tra vé déi tuong DataGridViewRow chtta dung mau tin dang chon nhu vi du 4-5
i du 4-5: Khai bao sw dung thuéc tinh CurrentRow
private void button2_Click (object sender, EventArgs e)
Trang 7[MỊ? 1:s Chương 4: Đối tượng DataGridView và ADO.NEÉ
ADM-00036 |Le Quoc Van |Hiep ADM-00038 [Dang Thuy Thi
S1 |ADM-00042 | Nguyen Quoc V | Sy
-|ADM-00047 | Mai Hoang Van Nam
Da naaec+ bat ve Th? keene
Cunertow ] [CurentCet_} [ColumnCount and Rows Count
í dụ 4-6: Khai báo sử dụng thuộc tính CurrentCell
private void button3_Click(object sender, EventArgs e) {
DataGridViewCell dataGridViewCell =
đataGridView1.CurrentCe11;
label1.Text = "CurrenERow Property: "+
Convert ToString (dataGridViewCell.Value) ;
Néu ban nhan vao nuit CurrentCell thì kết quả trình bày giá trị của,
ô đang chọn tương tự như hình 4-5
Ngoài ra, bạn cũng có thể biết được số lượng cột và hàng dữ liệu dang trình bay trén diéu khién DataGridView bằng cách sử dụng thuộc tính ColumnCount va Rows.Count nhu vi du 4-7
Trang 8Curentfiow Property: Dang Thuy Thi
EreloyealD Fistnane | Lastname Foreigner Gender
‘ADM-00022 [Dinh Tien’ Van | Sinh ole
‘ADM-00028 | Tat Vinh Thi HueThuong =f] | ] `
|ADM00031 |PhamNgoc Van tong sss) | E;
ADM-00036 |Le Quoc Van | Hiep o | oa]
> | ADM.00038 Diem Anh Oo
_{ADM-00042 |Nowen Quee V Sy o | o
‘ADM-00047 |MaiHoangVan |Nam o | o
Hinh 4-5: Si dung thuéc tinh CurrentCell
i du 4-7: S6 c6t va hang dif liéul
private void buttoni_Click (object sender, EventArgs e)
labell.Text = "ColumnCount Property: "+
Convert.ToString (dataGridView1l.ColumnCount) ; labell.Text += "-Rows.Count Property: "+
Convert ToString (dataGridViewl.Rows.Count) ;
Nếu bạn nhấn vào nút ColumnCount and Rows.Count thi két qua
trinh bay nhu hinh 4-6
ColumnCount Property: 16-Rows Count Property: 248
| Employee!D ( Firstname “Lastname Foreignet
> Dinh Tin Van Sinh o
| ADM-00028 TaVnhTh |Hue Thuong —_ la]
| _ |ADM-00031 Pham Ngoc Van _ 'Long D
-_ |ADM-00036 LeQuec Van jHẹp o _{ADM-00038 Dang Thy Thi Diemanh | SE]
ADM-00042 Nguyên Qược V Sy H_
ADM00047 |MaHomgVm (Nam Be:
"i Fie ieee m
Trang 9
(al 180 Chương 4: Đối tượng DataGridView và ADO.NET
1.2 Biến cố
Ngoài một số thuộc tính vừa trình bày ở trên, bạn có thể tìm hiểu một
số biến cố thường sử dụng như: SelectionChanged, DoubieCiick
1.3.1 Biến cố SelectionChanged
Biến cố SelectionChanged xảy ra khi người sử dụng di chuyển con nháy thuộc hàng dữ liệu đang trình bày trên điều khién DataGridView
Để làm điều này, bạn khai báo đoạn chương trình trong biến cố
SelectionChanged dé trình bày mã, họ và tên nhân viên như ví dụ 4-8
labell.Text = "CurrentRow Property: "+
Convert ToString (dgViewRow.Cells[0].Value) THẺ dc
Convert.ToString (dgViewRow.Cells[1].Value)
+Convert.ToString (
dgViewRow.Cells[2].Value) ;
Khi thực thi chương trình, nếu bạn di chuyển con chuột hay con nháy
trên từng hàng dữ liệu của điều khiển Dœ/œGridVieu thì mã, họ và tên
nhân viên trình bày như hình 4-7
ataGridView - [frmProperties]
CurentPiow Property: ADM-00047 Mai Hoang Van Nam
EnployeelD Firstname Lastname | Foreigner
‘ADM-00022 Dinh Tien Van thi 4 eee Bl ADM-00028 | TatVinh Thi Hue Thuong "TE
Pham Ngọc V: Van Long —_ oO
“TLeQuoc Van H TP Reed
'Dang Thuy Thi ñ 1
> LU =
= > S
a (_GurertCet_) [_CotsmnCount and Rows Count }
Logged by ADMINISTRATOR Soe
Hinh 4-7: Si dung bién cé SelectionChanged
Trang 10i du 4-9: Khai báo sử dung bién cé DoubleClick
private void dataGridViewl_DoubleClick(object sender, EventArgs e)
{
DataGridViewRow dgViewRow =
dataGridViewl.CurrentRow;
labell.Text = "DoubleClick Event: "+
Convert ToString (dgViewRow.Cells[0].Value) +
& DataGridView - [frmProperties]
DoubleClick E vent: ADM-00038-Dang Thuy Thi Diem Anh
'EmployealD | Firstname Lastname -— |ApM-00022 Dinh Tien Van Sinh
—_ [aow-ooma Tat Vinh Thi Hue Thuong
— |ADM-00031 Pham Ngoc Van |Long
ADM-00036 LeQuoc Van
|ADM-00038 Dang Thuy Thi
| ADM-00042 Nguyen Quoc V
| ADM-00047 Mai Hoang Van J
2 THÊM ĐIỀU KHIỂN VÀO DATAGRIDVIEW
Trong C# 2003, để thêm điều khiển nhu: TextBox, ComboBox hay CheckBox vào điều khiển Dœ£aGrid thì bạn cần tao Custom Control.
Trang 11(A? ise Chương 4: Đối tượng DataGridView và ADO.NET
Khi lam viéc vi diéu khién DataGridView trong C# 2005, ban cé thé thém diéu khién nhu: Button, TextBox, ComboBox, Image, Link hay CheckBox vao diéu khién DataGridView rất dễ dàng
Khi thêm điều khiển Button, TextBox, ComboBox, Image, Link hay CheckBox vao diéu khién DataGridView, ban có thể thực hiện bằng trực quan hoặc viết mã
Chẳng hạn, bạn chọn điều khiển DataGridView rồi R-Click | Add Colưmn | rồi thêm cột như hình 4-9
Hình 4-9: Thêm cột uào điều khién DataGridView
Khi thêm cột dit liéu vao diéu khién DataGridView thi cot nay dang
ở dạng không nhúng cột dữ liệu, sau đó bạn có thể điều chỉnh thuộc tính của cột bằng cách khai báo thuộc tính DaføPropertyNưrne bằng cách R-Click I Edit Columns
Luu y, méi Cell trén diéu khién DataGridView được xem như điều khién TextBox méi khi ban thém diéu khién khde vao diéu khién DataGridView Muc dich cia viéc thém cdc diéu khiển khác vào điều khiển
DataGridView 1a cho phép ching ta trinh bay dif liéu da dang
Trang 12Chương 4: Đối tượng DataGridView và ADO.NET
‘The name of the data source property or database
column to which the DataGridViewColumn is bound
Hinh 4-10: Thay déi trang thdi cét
2.1 Thém diéu khién TextBox vao DataGridView
Khi trình bày danh sách nhân viên trên diéu khién DataGridView, nếu bạn muốn định nghĩa tựa đề của cột dữ liệu thì bạn có thể thêm cột vào điều khiển DataGridView
Dé lam diéu nay, ban thém diéu khién DataGridView vào Form rồi chon và nhan R-Click | Add Column, cita sổ thêm cột xuất hiện hình 4-11
Header text: |MaNhan Vien} = Se
Veible [ ] ReadOnly [] Frozen
Hình 4-11: Thêm điều khiển TextBox vao DataGridView
Trang 13\nType DatzGidViewTextBoxcolu Xổi
Tương tự như vậy, bạn khai báo thuộc tinh DataPropertyName cho
hai cột còn lại là FirstName va LastName réi khai bdo doan chuong trinh trong bién cé Show nhu vi du 4-10.
Trang 14
Chương 4: Déi tugng DataGridView va ADO.NET 185
í dụ 4-10: Khai báo trình bày dữ liệu
private voiđ button1_C1ick(object sender, EventArgs e)
{
// Khai bdo va khéi tao déi tugng Databases
Databases cls = new Databases ();
// Khai bdo vé khéi tao déi tugng DataTable
DataTable dataTable = cls.FillDataTable (
"select EmployeeID, FirstName, "+
"LastName, ClassID fromtblEmployees", CommandType Text) ;
dataGridViewl DataSource = dataTable;
-_BNhanVien _—ˆ FisiName | LastName
.)M-00022 Dinh Tien Van | Sinh
2 : M-00028 Tat Vinh Thi Hue Thuong MAN
.3M-00031 Pham Ngoc Van |Long — MAN
}M-00036 7 MAN
— M000 Dang Thuy Thi | Diem Anh MAN
}— M0042 Nguyen Quoc V |BW MAN
: M-00047 Mai Hoang Van Nam MAN
Luu y, trong phat biéu SQL có 4 cột dữ liệu mà bạn chỉ thêm 3 điều
khién TextBox thi cét thứ 4 vẫn trình bày dữ liệu
2.2 Thêm điều khiển ComboBox vào DataGridView
Khi bạn muốn trình bày danh sách nhân viên trên điều khiển DataGridView, tai cét Class1D thì danh sách nhóm trình bày để cho phép người sử dụng có thể thay đổi nhóm như hình 4-15.
Trang 15
Chương 4: Đối tượng DataGridView và ADO.NET
DataGridView va Button
i FirstName | LastName ý DlasslD
ADM-00022 | Dinh Tien Van Sinh Manager
ADM-00028 i Hue Thuong i
_|ADM.00081 | Pham Ngee Van 'Leng a
_|JADM-00036 |LeQuoc Van 'Hiep roca
ADM-00038 | Dang Thuy Thi Diem Anh
~ ADM-00042 | Nouyen Quoc V | Sy Manager
ADM-00047 | Mai Hoang Van Nam Manager
ADM-00051 [Nguyen Km Thị {Phuong Manager
dby /
Leader
Hình 4-15: Trinh bay danh sdch nhdn uiên
Để làm điều này, trước tiên ban thiét ké Form bao gồm điều khiển
Kế đến, bạn #-Cỉck trên điều khiến
DataGridView va chon Add Column thi ctta sổ xuất hiện như hình 4-16
visible [_] Read Only E] Erozen
Trang 16Chương 4: Đối tuong DataGridView va ADO.NET 187
Sau khi thém 3 diéu khién TextBox va diéu khién ComboBox vao diéu
khién DataGridView, ban cé thé R-Click | Eidt Columns và khai báo thuộc
tinh DataPropertyName nhu hinh 4-17
‘ClassiD
i DataGridViewComboBoxCc vi
The name of the data source property or aoe phan which the DatacreVienColumns bord
Hinh 4-17: Khai bdo thuéc tinh DataPropertyName
í dụ 4-11: Khai báo trình bày dữ liệu
private void button1_Click(object sender, EventArgs e)
{
L1 Khai báo uà khởi tạo đối tượng Databases
Databases cls = new Databases () ;
L1 Khai bdo déi tugng DataTable cho diéu khién ComboBox
(1 Khai báo déi tuong DataTable cho
// diéu khién DataGridView
Trang 17IMỊ” 1ss Chu-ng 4: Đối tượng DataGridView và ADO.NET
DataTable dataTable = cls.FillDataTable(
"select EmployeeID, FirstName, "+
"LastName, ClassID from tblEmployees", CommandType Text) ;
dataGridViewl.DataSource = dataTable;
2.3 Thém diéu khién Button vao DataGridView
Dé thém diéu khién Button vao diéu khién DataGridView, ban cé thé thực hiện tương tự như hai trường hợp trên Chẳng han, bạn thiết kế Form réi chon và nhấn #-Ciick | Add Colưmn, cửa sổ thêm cột xuất hiện như
Header text: : |Approval | :
/ Visible [] Read Only
add | [_cancet_]
Hình 4-18: Thém diéu khién Button vao DataGridView
Sau khi thém cét la diéu khién Button vào điều khién DataGridView,
bạn chọn và R-Click | Edit Colưmns, cửa sổ khai báo thuộc tính cho điều khiển Bư¿‡on xuất hiện như hình 4-19
Trang 18Chương 4: Đối tượng DataGridView và ADO.NET
Hinh 4-19: Khai bdo thuéc tinh cho điều khiển Button
Kế đến, bạn khai bdo doan chuong trinh trong bién cd Show dé dién
dữ liệu vào điều khiển Dœ/aGr¡dVieu tại thuộc tinh Text cho hai nút Aprroudl, Delete như ví dụ 4-12
í dụ 4-12: Khài báo trình bày dữ liệu
private voiđ button1_C11ick (object sender, EventArgs e)
{
// Khai bdo va khdi tao déi tugng Databases
Databases cls = new Databases () ; // Khai bdo va khéi tao déi tugng DataTable
DataTable dataTable = c1s.Fi11DataTable (
"select EmployeeID, FirstName, "+
"LastName, ClassID from tblEmployees", CommandType.Text) ;
dataGridView1.DataSource = dataTable;
// Duyét trén ting hang foreach (DataGridViewRow grViewRow in dataGridView1 Rows)
{
grViewRow.Cells[0].Value grViewRow.Cells[1i] Value
} }
Khi thực thi chương trình, nếu bạn nhén nut Show thì dữ liệu trình
bày như hình 4-20
"OK";
"OK";
Trang 19—— |ADM-00038 |Dang Thuy Thì {DiemAnh 0K 0K _]|MAN
- JADM-00042 | Nguyen Quoc V | Sy OK 0K J|MAN
ânM.nnn47 ! Mai Hoang VAn, Nam = nk nk
Logged by ADMINISTRATOR
Hinh 4-20: Thém Button vao DataGridView
Khi người sử dụng nhấn vào một trong hai nút, bạn cần khai báo đoạn chương trình trong biến cố CelJCl¿ck để phân biệt nút bị nhấn như ví
Trang 20Chương 4: Đối tượng DataGridView và ADO.NET 191 [MỊ?
8pproval for: ADM-00028
Hình 4-21: Nhấn nút OK trong cot Approval
Tương tự như vậy, nếu bạn nhấn vào nút OK trong cột Deiete thì kết quả trình bày như hình 4-22
a
Delete for: ADM-00036
Hình 4-22: Nhấn nút OK trong cột Delete
2.4 Thêm diéu khién CheckBox vao DataGridView
Để thêm điều khiến CheckBox vao diéu khién DataGridView, ban thiét ké Form va thém diéu khién DataGridView réi chon va nhaén R-Click
| Add Colưmn, cửa số thêm cột xuất hiện hình 4-23
ñdd Column ‘acd
* 3 Databound column |
‘Columns rithe fataoource
Header text: |Avalable| m
M1 visble () Read only [TEezen
Hình 4-28: Thêm điều khiển CheckBox uào DataGridView
Trang 21FalseValue IndeterminateValue
Hình 4-24: Khai bdo thuéc tính cho diéu khién CheckBox
Tương tự như vậy, bạn khai báo đoạn chương trình trong biến cố
Shou như ví dụ 4-14
dụ 4-14: Khai báo trình bày dữ liệu
private void button1l_Click (object sender, EventArgs e)
{
// Khai bdo va khởi tạo đối tượng Dœtabases
Databases cls = new Databases () ;
// Khai bdo va khởi tạo đối tượng DataTable
DataTable dataTable = cls FillDataTable(
"select EmployeeID, FirstName, "+
"LastName, ClassID,Available from" +
"tblEmployees", CommandType.Text) ; dataGridViewl DataSource = dataTable;
}
Khi thực thi chương trình, nếu bạn nhan nut Show thi dit liéu trinh
bay nhu hinh 4-25.
Trang 22Chương 4: Đối tượng DataGridView và ADO.NET
|} ADM-00028 ADM-00031 _,ADM-00036 Hes
ˆ JAnM-00042 ˆ_|ADM-00047
| FirstName Dinh Tien Van
Tat Vinh Thi
Pham Ngoc Van
Hinh 4-25: Thém CheckBox vao DataGridView
Luu ý, nếu trong phát biểu SQL có 4 cột dữ liệu mà bạn chỉ thêm 3
điều khiển 7ex¿Box thì khi trình bày dữ liệu cột thứ 4 này vẫn xuất hiện
Ngoài ra, bạn cũng có thể trình bày thực đơn nóng mỗi khi người sử
dụng nhấn nút chuột phải trên điều khiển DataGridView
Ví dụ, khi người sử dụng nhấn nút chuột phải trên điều khiển
DataGridVieuo thì thực đơn xuất hiện như hình 4-26
Dinh Tien Van
ADM-00028 | Tat Vinh Thi
Mai Hoang Van
Nguyen Kim Thi
Trang 23í dụ 4-15: Khai báo cho Menul
private voidđ toolSEripMenuTtem1_C1ick(object sender,
2.5 Dinh dang cho 6
Để định dạng ô trong điều khiển DataGridView, ban c6 thé chon vào thuộc tính DeƒfbuitCellStyle, cửa sổ xuất hiện như hình 4-27
[82)013/0287/10/00 210
previews att Bee: a5 là
+ This preview shows properties from inherited CellStyles (Table, Column, Row)
Trang 24
Chương 4: Đối tuong DataGridView va ADO.NET 195
Khi thực thi chương trình, nếu bạn nhấn nút S»ou thì dữ liệu trình bày với cột thứ nhất xuất hiện màu như hình 4-28
DataGridView - [frmCetlStyte]
Ma Nhan Vien + FirstName | LastName: ? ClassID
Dinh Tien Van Sinh MAN
Tat Vinh Thi Hue Thuong MAN Pham Ngoc Van {Long MAN
Le Quoc Van Hiep MAN
Dang Thuy Thi | Diem Anh MAN
Nguyen Quoc V | Sy MAN Mai Hoang Van Nam MAN Nguyen Kim Thì {Phuong - oy MAN mtg
| Loosed by AptamvisTRATOR
Hinh 4-28: Khai bdo mau cho cét
Trong trường hợp bạn muốn định dạng cho những ô còn lại của điều khién DataGridView, ban cé thé khai báo đoạn chương trình sử dụng đối tuong DataGridViewCellStyle va thudc tinh DefaultCellStyle trong biến cố Click cia nit Apply Style nhu vi du 4-16
i du 4-16: Khai bao dinh dang cho 6
private void button2_Click(object sender, EventArgs e) {
DataGridViewCellStyle CellStyle = new DataGridViewCellStyle()j;
Trang 25IMỊ” 196 Chương 4: Đối tượng DataGridView và ADO.NET
Hinh 4-29: Dinh dang mau
3 ĐỐI TƯỢNG BINDINGSOURCE
Thay vì bạn phải khai báo để liệt kê danh sách mẩu tin của bảng con khi người sử dụng di chuyển trên từng mẩu tin của bảng cha thì bạn có thể
sử dụng đối tượng BindingSource cùng với đối tượng DœfaSet và DataRelation
Chẳng hạn, bạn muốn liệt kê danh sách phòng ban trên điều khiển DataGridVieu, mỗi khi người sử dụng chọn vào mã phòng ban thì danh sách nhân viên và hợp đồng lao động của họ sẽ liệt kê trên điều khiển
DataGridView thứ hai như hình 4-30
Dinh Tien Van Sinh C000000161 'ADM-00022 !4/28/200
Tat Vinh Thi Hue Thuong | (000000162 -ADM.00028 | 5/28/200
[Pham Nene Van i ana Cnnnnnma ÌAnM.nnx1
Trang 26
Chương 4: Đối tượng DataGridView và ADO.NET 197
Để làm điều này, trước tiên bạn thiết kế Form bao gồm hai diéu
khién DataGridView va Button nhu hinh 4-31
Hình 4-31: Thiét ké Form dung doi tuong BindingSource
Ké dén, ban khai bdo phuong thtte MakeBindingSource nhan hai
tham số là BindingSource ứng với bảng cha là £b1Departmen‡s và con là sự
kết hợp giữa hai bảng tblEmployees va tblContracts nhu vi du 4-17
í dụ 4-17: Khai báo sử dụng đối tượng BindingSource
!1 Khai báo phát biểu SQL ting voi bang cha
string parentSQL = "select DeptID, "+
"DeptName from tblDepartments";
!1 Khai báo phát biểu SQL ứng uới hai bảng con string childSQL= "select FirstName, "+
"Lastname,* from tbhlContracts C, "+
"tblEmployees E where E.EmployeeID=" +
Trang 27// Khai báo đối tượng DataColumn ứng uới bhóa ngoại DataColumn £k =
// Khai bdo thuéc tinh DataSource cho
LJ đối tượng BindingSource
bindingParent DataSource = dataSet;
i du 4-18: Khai bao goi phuong thức MakeBindingSource
private void button1l_Click (object sender, EventArgs e)
// Khai bdo va khdi tao déi tuong BindingSource
// ứng uới bảng hai bang con
BindingSource bindingChild =
new BindingSource() ;
Trang 28
Chương 4: Đối tượng DataGridView và ADO.NET
11 Khai báo gọi phương thức MuheBindingSource
Mỗi khi người sử dụng chọn mẩu tin trên điều khiển Dœ/gGridVieio
thứ nhất thì danh sách mẩu tin có mã phòng ban trong bảng tblContracts
tương ứng sẽ trình bày tương tự như hình 4-32
LaVan Tủ Van, £nnnmnin1 n1v.an18
4 DOL TUGNG BINDINGNAVIGATOR
Nếu như bạn muốn cho phép người sử dụng di chuyển trên từng mẩu
tin của bảng cha mà khong truc tiép chon trén diéu khién DataGridView
thi bạn có thể sử dụng ddi tugng BindingSource kết hợp với
BindingNavigator
Để làm điều này, trước tiên bạn thiết kế Form với hai điều khiển
DataGridView va Button nhu hinh 4-33
Trang 29Hinh 4-33: Siz dung BindingNavigator
Kế đến, bạn khai báo phương thức có tên MakeBindingSource nhận
hai tham số là BindingSource ứng với bảng cha là tblDepartments va con la
sự kết hợp giữa hai bảng £b1Employees và tblContracts như ví dụ 4-19
Vi du 4-19: Kh
ai báo sử dụng đối tượng BindingSouree
void MakeBindingSource(
BindingSource bindingParent, BindingSource bindingChild)
{
11 Khai báo va khối tạo đối tượng Databases
Databases c1s = new Databases () ; // Khai báo phát biểu SQL ứng uới bảng cha string parentSQL = "select *"+
" from tblDepartments";
11 Khai báo phát biểu SQL ứng uới hơi bảng con
string childSQL = "select FirstName, "+
"Lastname, * from tblContracts C, "+
"tblEmployees E where E.EmployeeID=" +
"C.EmployeeID";
// Khai bdo déi tugng DataSet DataSet dataSet =cls.FillDataSet ( parentSQL, "tblDepartments", childSQL,
"tblContracts", CommandType Text) ;
11 Khai báo đối tượng DataColumn ứng uới
£1 cột khóa chính
Trang 30
Chương 4: Đối tượng DataGridView và ADO.NET 201
DataColumn pk = dataSet.Tables[0].Columns[0];
// Khai bdo déi tugng DataColumn ting vdi khéa ngoại DataColumn fk =
dataSet Tables[1] Columns[15];
L1 Khai báo uà bhởi tạo đối tượng DataRelation DataRelation dr = new
DataRelation("Relation", pk, fk, true);
LỊ Khai báo thêm đối tượng DataRtelation uào /[I đối tượng DataSet
đataSet Relations Add (đr) ;
L] Khai báo thuộc tính DataSource cho
L1 đối tượng BindingSource bindingParent.DataSource = dataSet;
i du 4-20: Khai báo gọi phương thức MakeBindingSource
private void button1_C1ick(ob3ject senđer, EventArgs e)
L1 ứng uới bảng hai bảng con BindingSource bindingChild = new BindingSource() ; // Khai bdo goi phuong thitc MakeBindingSource MakeBindingSource (
Trang 31Chương 4: Đối tugng DataGridView va ADO.NET
Hình 4-34: Sở dụng đối tượng BindingNquigdtor
Lưu ý, bạn có thể chọn nút › hay 4 để di chuyển trên từng mẩu tin của
bảng tblDepartments
Trong trường hợp dữ liệu của bảng cha trình bày trên các điều khiển tương ứng nhu: TextBox, ComboBox, thi ban cé thé sử dụng đối tượng BindingNavigator nhu hinh 4-35
Trang 32
Chương 4: Đối tượng DataGridView và ADO.NET
Hình 4-85: Sử dụng đối tượng BindingNauigdtor
Để làm điều này, trước tiên bạn thiết kế Form có giao diện như hình
Hinh 4-36: Đối tượng BindingNavigator va TextBox
Kế đến, ban khai bdo phuong thuc c6 tén GetDataSet nhan hai tham sé 1a BindingSource tmg véi bang cha 1a tblDepartments va con 1a su kết hợp hai bang tblEmployees va tblContracts tra về đối tugng DataSet như ví dụ 4-21
{ du 4-21: Khai báo sử dụng đối tượng BindingSource
DataSet GetDataSet (
BindingSource bindingParent,
BindingSource bindingChild)
{
Trang 33Bal? 204 Chương 4: Đối tượng DataGridView và ADO.NET
"Lastname,* from tblContracts C, "
"tblEmployees E where E.EmployeeID=" +
"C.EmployeeID";
// Khai bdo doi tuong DataSet
DataSet dataSet = cls.FillDataSet (
parentSQL, "tblDepartments", childSQL,
"tblcontracts", CommandType Text) ; /1 Khai bdo déi tugng DataColumn ting voi
bindingParent DataSource = dataSet;
Trang 34Chuong 4: Déi tugng DataGridView va ADO.NET 205 MỊ?
í dụ 4-22: Khai báo gọi phương thức GetDataSet
private voiđ button1_C1ick(object sender, EvenEArgs e)
11 Khai báo uò khởi tạo đối tượng BindingSource // ting voi bảng hai bảng con
BindingSource bindingChild =
new BindingSource() ;
LỊ Khai báo gọi phương thức GetDataSet
DataSet dataSet = GetDataSet (
// Khai bdo thuéc tinh cho hai điều khiển TextBox textBoxl DataBindings.Add(new Binding("Text", bindingParent, "DeptID"));
textBox2.DataBindings Add("Text", bindingParent, "DeptName") ;
/ 1 Khai bdo thuéc tinh cho diéu khién DataGridView dataGridView2.DataSource = bindingChild;
Trang 35Chương 4: Đối tượng DataGridView và ADO.NET
\'FustName Lawnameˆˆˆ ConuaclNoˆ ' EmployeelD
biện Due C000000530 ENG-00193
TianVanVan | Tam C000001180 ENG-90001 lạ,
S {Tran Van Van ¡Tam C000000320 ENG-90001 - J4
PhanKhac Van |Hien C000000017 ENG-90003 4/3
Hình 4-37: Sử dụng đối tượng BindingNavigator
Lưu ý, bạn có thể thực hiện việc sử dụng 3 đối tượng BindingSouree, BindingNavigator va DataSet bằng giao diện trực quan từ ngăn Dœ¿ø của ctta s6 ToolBox như hình 4-38
Trang 36Sau khi khai báo và sử dụng đối tượng Dœ¿aGridVi¡eu và các đối tượng
như: Dœ¿aSet, DœtœTable, DataVieu, chúng ta có thể khai báo hai phương
thức dùng chung cho điều khiển nay véi hai déi tugng DataTable, DataView trong lớp Controls
Phương thức thứ nhất nhận tham số là phat biéu SQL, diéu khién ° DataGridView va loai câu truy vấn như ví dụ 4-23
í dụ 4-28: Khai báo phương thức dùng chung
internal void FillControls (
DataGridView dataGridView, string strSQL,
Tương tự như vậy, trong trường hợp bạn cho phép người sử dụng trích
lọc dữ liệu thì khai báo phương thức có thêm tham số là đối tượng DataTable và chuỗi ứng với thuộc tính RouFiiter của đối tượng DœœVieu như ví dụ 4-24
í dụ 4-34: Khai báo phương thức dùng chung
internal void FillControls (
Trang 37
Chương 4: Đối tượng DataGridView và ADO.NET
dataGridView DataSource = đataView;
í dụ 4-25: Khai báo gọi phương thức dùng chung
brivate void button2_C1ick(object senđer, EventArgs e)
{
// Khai bdo va khởi tạo đối tượng Controls Controls cls = newControls();
// Khai báo gọi phương thức FillControls
c€l1s.Fi11Controls (this đataGridView1,
"select * from tblContracts", CommandType.Text) ;
Trang 38Chuong 4: Déi tugng DataGridView va ADO.NET 209 MỊ”
Khi thực thi chương trình, nếu bạn nhấn vào nut DataTable thi két
quả trình bày danh sách hợp đồng của nhân viên như hình 4-40
Contacto | EmployeelD | ContractDate | ContiactTyr| Commencement |^
‘\cooooo0002 |ENG-90032 | 4/28/2006 One Year | 4/28/2006 6:53
|C000000012 |DTY-00014 | 4/28/2006 6:59 |No Limit | 4/28/2006 6:59
— fco00000013 |DTY-00020 | 4/28/2006 6:59 |NoLimit | 4/28/2006 6:59
Co00000014 |ADM-80095 | 4/28/2006 6:59 |One'Year | 4/28/2006 6:59
_ }cooo000g1s |ADM-80096 | 4/28/20066:59 |NoLimit | 4/28/2006 6:59
_ [cooo000016 |ADM-80088 |4/28/2006653 One Year | 4/28/2006 6:53
Tương tư như vậy, nếu bạn có nhu cầu truy trích lọc dữ liệu trên đối
tugng DataTable thi bạn có thể trích lọc dữ liệu trong déi tugng DataTable
bằng cách khai báo tương tự như ví dụ 4-26
Ví dụ 4-26: Khai báo gọi phương thức dùng chung
private void button3_Click(object sender, EventArgs e)
/ 1 Khai bdo va khéi tao déi tugng Controls Controls cls = newControls();
// Khai bdo gọi phương thức FillControls els.FillControls(this.dataGridvView1, dataTable,"DeptID='ADM'",
CommandType.Text) ;
Trang 39Trong chương kế tiếp, chúng ta tiếp tục tìm hiểu cách sử dụng Repor¿,
Crystal Report với hai điều khiển ReportVieuer và CrystalReportVieuer
trong ting dung Windows Forms
Trang 40Chuong 5: Lam viéc véi Report va Crystal Report 211 [MỊ?
ReportViewer, CrystalReportViewer từ đối tuong DataSet,
DataTable, DataView hay OLEDB (ADO)
Các uấn đề chính sẽ được đề cập:
v_ Thiết ké Crystal Report
Y Trinh bay dit liéu bang CrystalReportViewer
Y Trinh bay dit liu bang Report va ReportViewer
1 THIẾT KẾ CRYSTAL REPORT
Để làm việc véi Crystal Report, ban cé thé tạo mới Projec£ loại Crystal Reports Application hoac tu khai báo tham chiéu dén khéng gian
tên trong du dn loai Windows Forms
Mặc dù Microsoft đã thiết kế, tạo kết nối và tương tác bằng nhiều
cách khác nhau cho Crystal Report, nhung trong chuong nay chúng tôi sẽ
giới thiệu đến các bạn cách sử dụng đối tugng DataSet, DataTable va
OLEDB (ADO)
Có hai cách để thực hiện ý định này Cách thứ nhất là thêm đối tượng
DataSet tit ngan Data trong cita s6 ToolBox vao Form Cach thu hai, khai bdo bién déi tugng DataSet trong Class tury y Ca hai cach nay cho phép ban
sử dụng điều khiển CrystalReportViewer dé trinh bay trén Form