04 chuong4-databinding-140404115313-phpapp02
TRANSCRIPT
![Page 1: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/1.jpg)
Data BindingChương 4
![Page 2: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/2.jpg)
2
Nội dung
Khái niệm Data Binding Simple Data Binding Complex Data Binding Đồng bộ dữ liệu giữa các control và datasource Master – Detail Binding Source Binding Navigator
![Page 3: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/3.jpg)
3
Khái niệm Data Binding
Data Binding giúp hiển thị dữ liệu trong Data Source lên control
Data binding là một giải pháp cho vấn đề liên kết giữa tập dữ liệu với các controls
Phân loại: Có 2 loại Data Binding• Simple Data Binding• Complex Data Binding
![Page 4: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/4.jpg)
4
Simple Data Binding
Kết nối 1 property của control (loại property chỉ lưu 1 giá trị tại 1 thời điểm) với 1 cột (hay property) của data source
Ví dụ: • string tenControl.Text• object tenControl.Tag• Image picBox.Image• bool checkBox.Checked• bool radioButton.Checked• int trackBar.Value• …
![Page 5: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/5.jpg)
5
Simple Data Binding
Cách 1:DataBinding binding;binding = new DataBinding("propertyName",
dataSource, "dataMember", true);
tenControl.DataBindings.Add(binding);
tenControl.DataBindings.Add("propertyName", dataSource, "dataMember", true);
Cách 2:
![Page 6: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/6.jpg)
6
Complex Data Binding
Kết nối 1 control có khả năng hiển thị nhiều giá trị tại 1 thời điểm với 1 cột hay tất cả các cột trong data source
Ví dụ: • DataGridView• ComboBox• ListBox• …
![Page 7: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/7.jpg)
7
Complex Data Binding
Cách 1tenControl.DataSource = tenBang;
Cách 2tenControl.DataSource = tenDataSet;tenControl.DataMember = tenBang;
![Page 8: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/8.jpg)
8
Data Binding đến Property
Data Binding đến thuộc tính TexttenTextBox.DataBindings.Add("Text", tenBang, "tenCot");tenLabel.DataBindings.Add("Text", tenBang, "tenCot");tenButton.DataBindings.Add("Text", tenBang, "tenCot");tenCheckBox.DataBindings.Add("Text", tenBang, "tenCot");…
tenTextBox.DataBindings.Add("Text", tenDS, “tenBang.tenCot");
tenLabel.DataBindings.Add("Text", tenDS, “tenBang.tenCot");
tenButton.DataBindings.Add("Text", tenDS, “tenBang.tenCot");
tenCheckBox.DataBindings.Add("Text", tenDS, “tenBang.tenCot");
…
![Page 9: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/9.jpg)
9
Data Binding đến Property
Data Binding đến thuộc tính Tag
tenControl.DataBindings.Add("Tag", tenBang, "tenCot");
tenControl.DataBindings.Add("Tag", tenDS, “tenBang.tenCot");
![Page 10: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/10.jpg)
10
Data Binding đến Property
Data Binding đến thuộc tính CheckedtenCheckBox.DataBindings.Add(
"Checked", tenBang, "tenCot");tenRadio.DataBindings.Add(
"Checked", tenBang, "tenCot");…
tenCheckBox.DataBindings.Add("Checked", tenDS, “tenBang.tenCot");
tenRadio.DataBindings.Add("Checked", tenDS, “tenBang.tenCot");
…
![Page 11: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/11.jpg)
11
Data Binding đến Property
Data Binding đến thuộc tính ValuetenDateTimePicker.DataBindings.Add(
“Value", tenBang, "tenCot");tenProcessBar.DataBindings.Add(
“Value", tenBang, "tenCot");tenTrackBar.DataBindings.Add(
“Value", tenBang, "tenCot");tenNumricUpDown.DataBindings.Add(
“Value", tenBang, "tenCot");tenVScrollBar.DataBindings.Add(
“Value", tenBang, "tenCot");tenHScrollBar.DataBindings.Add(
“Value", tenBang, "tenCot");…
![Page 12: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/12.jpg)
12
Data Binding đến Property
Data Binding đến thuộc tính ValuetenDateTimePicker.DataBindings.Add(
"Value", tenDS, "tenBang.tenCot");tenProcessBar.DataBindings.Add(
"Value", tenDS, "tenBang.tenCot");tenTrackBar.DataBindings.Add(
"Value", tenDS, "tenBang.tenCot");tenNumricUpDown.DataBindings.Add(
"Value", tenDS, "tenBang.tenCot");tenVScrollBar.DataBindings.Add(
“Value", tenDS, "tenBang.tenCot");tenHScrollBar.DataBindings.Add(
“Value", tenDS, "tenBang.tenCot");…
![Page 13: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/13.jpg)
13
Data Binding đến DataGridView
Cách 1tenGrid.DataSource = tenBang;
Cách 2tenGrid.DataSource = tenDataSet;tenGrid.DataMember = "TenBang";
![Page 14: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/14.jpg)
14
Data Binding đến ComboBox
Cách 1tenComboBox.DataSource = tenBang;tenComboBox.DisplayMember = "tenCot1";tenComboBox.ValueMember = "tenCot2";
Cách 2tenComboBox.DataSource = tenDataSet;tenComboBox.DisplayMember = "tenBang.tenCot1";tenComboBox.ValueMember = "tenBang..tenCot2";
![Page 15: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/15.jpg)
15
Data Binding đến ListBox
Cách 1tenListBox.DataSource = tenBang;tenListBox.DisplayMember = "tenCot1";tenListBox.ValueMember = "tenCot2";
Cách 2tenListBox.DataSource = tenDataSet;tenListBox.DisplayMember = "tenBang.tenCot1";tenListBox.ValueMember = "tenBang..tenCot2";
![Page 16: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/16.jpg)
Đồng bộ dữ liệu giữa các control và datasource
![Page 17: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/17.jpg)
17
Đồng bộ dữ liệu giữa control và data source
Khái niệm Cơ chế đồng bộ của .NET 1.x Các thao tác của đối tượng
CurrencyManager
![Page 18: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/18.jpg)
18
Đồng bộ dữ liệu giữa control và data sourceKhái niệm
Đồng bộ dữ liệu là khả năng cập nhật tức thì dữ liệu giữa các control hay giữa các control và Data source• Ví dụ:
– Khi nhấn button “Next”, chúng ta thấy các control đều cập nhập dữ liệu của record kế tiếp
– Khi chọn record bằng listbox, chúng ta thấy các thông tin liên quan tự động xuất hiện trên các control khác của cùng form
![Page 19: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/19.jpg)
19
Đồng bộ dữ liệu giữa control và data sourceCơ chế đồng bộ của .NET 1.x
Khả năng đồng bộ trong .NET 1.x không hiện thực trong ADO.NET (DataSet, DataView không có thông tin về record nào đang hiện trên form)
Khả năng đồng bộ trong .NET 1.x được hiện thực trong Windows Form thông qua property BindingContext và lớp CurrencyManager
![Page 20: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/20.jpg)
20
Đồng bộ dữ liệu giữa control và data sourceCơ chế đồng bộ của .NET 1.x
Khi chúng ta kết nối các control với một data source, chương trình tự động tạo ra một đối tượng thuộc lớp CurrencyManager để theo dõi vị trí của record trong datasource
Mỗi data source tương ứng có 1 đối tượng CurrencyManager
Windows Form lưu tất cả đối tượng CurrencyManager vào trong mảng BindingContext
![Page 21: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/21.jpg)
21
Đồng bộ dữ liệu giữa control và data sourceCơ chế đồng bộ của .NET 1.x
![Page 22: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/22.jpg)
22
Đồng bộ dữ liệu giữa control và data source Các thao tác của đối tượng CurrencyManager
CurrencyManager cm;cm = (CurrencyManager)this.BindingContext[tenDataSet,"Bảng"];
Cách 1
CurrencyManager cm;cm = (CurrencyManager)this.BindingContext[tenBang];
Cách 2
![Page 23: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/23.jpg)
23
Đồng bộ dữ liệu giữa control và data source Các thao tác của đối tượng CurrencyManager
Lớp CurrencyManager• Property:
– int Position– int Count
• Method: – void AddNew()– void EndCurrentEdit()– void CancelCurrentEdit()– void RemoveAt(int index)
![Page 24: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/24.jpg)
24
Đồng bộ dữ liệu giữa control và data source Các thao tác của đối tượng CurrencyManager
Next• cm.Position++;
Previous• cm.Position--;
First• cm.Position = 0;
Last• vt = cm.Count – 1;• cm.Position = vt;
![Page 25: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/25.jpg)
25
Đồng bộ dữ liệu giữa control và data source Các thao tác của đối tượng CurrencyManager
CurrencyManager cm;cm = (CurrencyManager)this.BindingContext[dataTable];if (cm.Position < cm.Count - 1){ cm.Position++;}
Những thao tác cơ bản
CurrencyManager cm;cm = (CurrencyManager)this.BindingContext[dataTable];if (cm.Position > 0){ cm.Position--;}
![Page 26: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/26.jpg)
26
Đồng bộ dữ liệu giữa control và data source Các thao tác của đối tượng CurrencyManager
Insert• void cm.AddNew();
Update• cm.EndCurrentEdit();
da.Update(dataTable); Delete
• index = cm.Position• cm.RemoveAt(index);
Cancel• cm.CancelCurrentEdit();
![Page 27: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/27.jpg)
27
Đồng bộ dữ liệu giữa control và data source Các thao tác của đối tượng CurrencyManager
Chú ý quan trọng: • Data source và data member của các control
phải đồng nhất với nhau– Hoặc cùng dataset– Hoặc cùng datatable
• Tốt nhất: nên dùng datatable
![Page 28: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/28.jpg)
Master – Detail
![Page 29: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/29.jpg)
29
Master – detail
Master – detail: dạng quan hệ 1-n trong cơ sở dữ liệu
![Page 30: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/30.jpg)
30
Master – detail
Bước 1: fill dữ liệu • Fill 2 bảng vào dataset (bao gồm khóa chính và khóa ngoại)
Bước 2: tạo quan hệ • DataColumn colMaster =
ds.Tables[“tenMaster"].Columns[“cộtPK"];• DataColumn colDetail = ds.Tables[“tenDetail"].Columns[“cộtFK"];• DataRelation relation = new DataRelation(“tenquanhe",
colMaster, colDetail);• ds.Relations.Add(relation);
![Page 31: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/31.jpg)
31
Master – detail
Bước 3: (cách 1)• dataGridViewMaster.DataSource = ds;• dataGridViewMaster.DataMember = “tenMaster";
• dataGridViewDetail.DataSource = ds;• dataGridViewDetail.DataMember =
“tenMaster.tenquanhe";
![Page 32: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/32.jpg)
32
Master – detail
Bước 3: (cách 2)• dataGridViewMaster.DataSource =
ds.Tables[“tenMaster”];
• dataGridViewDetail.DataSource = ds.Tables[“tenMaster”];
• dataGridViewDetail.DataMember = “tenquanhe";
![Page 33: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/33.jpg)
33
Binding Source
Khái niệm Tạo đối tượng Binding Source Kết nối control với Binding Source Các thao tác của đối tượng BindingSource
![Page 34: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/34.jpg)
34
Binding SourceKhái niệm
Trong .NET 1.X, chỉ cho phép kết nối trực tiếp giữa Control đến Data Source
Trong .NET 2.0, cho phép kết nối giữa Control và Data Source thông qua đối tượng trung gian Binding Source
Ưu điểm khi sử dụng Binding Source• Dễ dàng thay đổi Data Source của các Control• Cung cấp nhiều sự kiện và các phương thức
![Page 35: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/35.jpg)
35
Binding SourceKhái niệm
Data source
BindingSource
![Page 36: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/36.jpg)
36
Binding SourceKhái niệm
Bin
ding
Sour
ceB
indi
ngSo
urce
Dat
aSet
Dat
aSet
Dat
aTab
leD
ataT
able
DataSourceDataSource
DataMemberDataMember
SimpleSimpleControlControl
ComplexComplexControlControl
Col
umn
Col
umnDataBindingDataBinding
PropertyProperty
Thay đổi nội Thay đổi nội dung bằng dung bằng navigatornavigator
Bin
ding
Nav
igat
orB
indi
ngN
avig
ator
BindingSourceBindingSource
DataSourceDataSource
![Page 37: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/37.jpg)
37
Binding Source Tạo đối tượng Binding Source
Cách 1:
BindingSource bs;bs = new BindingSource();…bs.DataSource = dataSource;bs.DataMember = "dataMember";
Cách 2:BindingSource bs;bs = new BindingSource(dataSource, "dataMember");
![Page 38: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/38.jpg)
38
Binding Source Kết nối control với Binding Source
Simple Data Binding
tenControl.DataSource = bs;//tenControl.DataMember = "tenBang";
Complex Data Binding
tenControl.DataBindings.Add("propertyName", bs, "dataMember", true);
![Page 39: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/39.jpg)
39
Binding SourceCác thao tác của đối tượng BindingSource
Next• bs.MoveNext();
Previous• bs.MovePrevious();
First• bs.MoveFirst();
Last• bs.MoveLast();
![Page 40: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/40.jpg)
40
Binding SourceCác thao tác của đối tượng BindingSource
Insert• object bs.AddNew();
Update• bs.EndEdit();
da.Update(dataTable); Delete
• void bs.RemoveAt(index);• void bs.RemoveCurrent();
Cancel• bs.CancelEdit();
![Page 41: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/41.jpg)
41
Binding SourceCác thao tác của đối tượng BindingSource
Property• int bs.Position• int bs.Count• CurrencyManager bs.CurrencyManager• string bs.Filter• string bs.Sort
Method• void bs.ResetBinding(bool metaDataChanged); • void bs.ResetCurrentItem();• void bs.ResetItem(int index);
![Page 42: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/42.jpg)
42
Binding Navigator
Binding Navigator là 1 phiên bản mới của ToolStrip trong .NET 2.0 bao bọc các chức năng: MoveNext, MovePrevious, MoveFirst, MoveLast, AddNew, RemoveCurrent, …
![Page 43: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/43.jpg)
43
Binding Navigator
Các bước tạo Binding Navigator• Bước 1: Kéo Binding Navigator vào Form• Bước 2: Thiết lập BinddingSource
tenNavigator.BindingSource=tenBindingSource;
![Page 44: 04 chuong4-databinding-140404115313-phpapp02](https://reader035.vdocuments.site/reader035/viewer/2022081604/58a2cb111a28ab217a8b691b/html5/thumbnails/44.jpg)
44
Tóm tắt chương 4