開始以前,,先認識一下WinForm控件數(shù)據(jù)綁定的兩種形式,簡單數(shù)據(jù)綁定和復雜數(shù)據(jù)綁定,。 1) 簡單數(shù)據(jù)綁定 簡單的數(shù)據(jù)綁定是將用戶控件的某一個屬性綁定至某一個類型實例上的某一屬性,。采用如下形式進行綁定:引用控件.DataBindings.Add("控件屬性", 實例對象, "屬性名", true); 2) 復雜數(shù)據(jù)綁定 復雜的數(shù)據(jù)綁定是將一個以列表為基礎(chǔ)的用戶控件(例如:ComboBox、ListBox,、ErrorProvider,、DataGridView等控件)綁定至一個數(shù)據(jù)對象的列表。 基本上,,Windows Forms的復雜數(shù)據(jù)綁定允許綁定至支持IList接口的數(shù)據(jù)列表,。此外,,如果想通過一個BindingSource組件進行綁定,還可以綁定至一個支持IEnumerable接口的數(shù)據(jù)列表,。 對于復雜數(shù)據(jù)綁定,,常用的數(shù)據(jù)源類型有(代碼以Combobox作為示例控件): 1)IList接口(包括一維數(shù)組,ArrayList等) 示例: private void InitialComboboxByList() { ArrayList list = new ArrayList(); for (int i = 0; i < 10;i++ ) { list.Add(new DictionaryEntry(i.ToString(), i.ToString() + "_value")); } this.comboBox1.DisplayMember = "Key"; this.comboBox1.ValueMember = "Value"; this.comboBox1.DataSource = list; } 2)IListSource接口(DataTable,、DataSet等) private void InitialComboboxByDataTable() { DataTable dt=new DataTable(); DataColumn dc1 = new DataColumn("Name"); DataColumn dc2 = new DataColumn("Value");
dt.Columns.Add(dc1); dt.Columns.Add(dc2);
for (int i = 1; i <=10;i++ ) { DataRow dr = dt.NewRow(); dr[0] = i; dr[1] = i + "--" + "hello"; dt.Rows.Add(dr); }
this.comboBox1.DisplayMember = "Name"; this.comboBox1.ValueMember = "Value"; this.comboBox1.DataSource = dt; } 3) IBindingList接口(如BindingList類) 4) IBindingListView接口(如BindingSource類) 示例: private void InitialComboboxByBindingSource () { Dictionary<string, string> dic = new BindingSource <string, string>(); for (int i = 0; i < 10;i++ ) { dic.Add(i.ToString(),i.ToString()+"_hello"); this.comboBox1.DisplayMember = "Key"; this.comboBox1.ValueMember = "Value"; this.comboBox1.DataSource = new BindingSource(dic, null); } } 注意一下上面的程序,,BindingSource的DataSource屬性值為一個Dictionary類型的實例,如果用dic直接給Combobox賦值的話,,程序會報錯,,因為Dictionary<>并沒有實現(xiàn)IList或IListSource接口,但是將Dictionary<>放到BindingSource中便可以實現(xiàn)間接綁定,。關(guān)于BindingSource更詳細的信息請在該網(wǎng)址查看: http://msdn.microsoft.com/zh-cn/library/system.windows.forms.bindingsource(VS.80).aspx 再看下面一個BindingSource的示例: private void InitialComboboxByObject() { this.comboBox1.DisplayMember = "Name"; this.comboBox1.ValueMember = "Value"; this.comboBox1.DataSource = new BindingSource(new DictionaryEntry("Test","Test_Value"), null); } 上面代碼中BindingSource的Datasource是一個結(jié)構(gòu)類型DictionaryEntry,,同樣的DictionaryEntry并不能直接賦值給Combobox的DataSource,但通過BindingSource仍然可以間接實現(xiàn),。 這是因為: BindingSource可以作為一個強類型的數(shù)據(jù)源,。其數(shù)據(jù)源的類型通過以下機制之一固定: · 使用 Add 方法可將某項添加到 BindingSource 組件中。 · 將 DataSource 屬性設(shè)置為一個列表,、單個對象或類型,。(這三者并不一定要實現(xiàn)IList或IListSource) 這兩種機制都創(chuàng)建一個強類型列表。BindingSource 支持由其 DataSource 和 DataMember 屬性指示的簡單數(shù)據(jù)綁定和復雜數(shù)據(jù)綁定,。 |
|