[C#] 簡單資料繫結 (Data Binding) 練習(一)
Introduction
我想基本的觀念是粉重要,實務上的專案都是由厚實的基礎上打造實現的,當然,在真正開發上這些寫法是不可能出現的,
也許我們可以從一些小小的範例,刺激一些靈感;我也還是初學者,寫些文章提醒自己。
很多時候,我們都是從資料庫撈資料,然後 Binding 到 UI 介面,這中間牽扯到架構與元件資料的溝通與傳輸,這邊並不會
出現這類的討論,因為我也還不是那麼熟,還望前輩指點。
Samples
sample1 超級簡單資料繫結
這邊先打造一個共用客戶資料類別 Cumtomer.cs
/// <summary>
/// 客戶資料類別。
/// </summary>
public class Customer {
/// <summary>
/// 建構函式。
/// </summary>
public Customer() { }
/// <summary>
/// 客戶代碼。
/// </summary>
public uint ID { get; set; }
/// <summary>
/// 客戶名稱。
/// </summary>
public string Name { get; set; }
/// <summary>
/// 客戶年齡。
/// </summary>
public uint Age { get; set; }
}
UI 介面
Form1.cs
private void Form1_Load(object sender, EventArgs e) {
//建立客戶資料物件
Customer oCustomer = new Customer { ID = 123456, Name = "FreeMan", Age = 25 };
//利用 Binding 方法繫結資料
txtID.DataBindings.Add("Text", oCustomer, "ID", true);
txtName.DataBindings.Add("Text", oCustomer, "Name", true);
txtAge.DataBindings.Add("Text", oCustomer, "Age", true);
}
輸出畫面
Sample2 繫結至清單項目介面
Windows Forms 的資料繫結允許繫結至支援 IList 介面的資料清單 (例如: ComboBox、ListBox、DataGridView…等等)
若是使用 BindingSource 元件來進行繫結,還可以繫結至一個支援 IEnumerable 介面的資料清單。
這邊使用 System.ComponentModel.BindingList 來儲存客戶資料。
Form2.cs
private void Form2_Load(object sender, EventArgs e) {
//建立泛型集合物件來儲存客戶資料
System.ComponentModel.BindingList<Customer> oCustomers =
new BindingList<Customer>();
oCustomers.Add(new Customer { ID = 01, Name = "小明", Age = 6 });
oCustomers.Add(new Customer { ID = 02, Name = "小華", Age = 7 });
oCustomers.Add(new Customer { ID = 03, Name = "小鬼", Age = 8 });
//將 Grid 的資料來源設為泛型集合物件
this.dataGridView1.DataSource = oCustomers;
}
輸出畫面
Sample3 於清單上使用簡單的資料繫結
我們這邊嘗試將上面兩個例子組合一下,當我們都使用同一個集合物件當作資料來源時,Window Forms 執行階段會自動進行同步化處理,
然而,處理同步化是透過 CurrencyManager 類別。直接看 code。
Form3.cs
private void Form3_Load(object sender, EventArgs e) {
//建立泛型集合物件來儲存客戶資料
System.ComponentModel.BindingList<Customer> oCustomers =
new BindingList<Customer>();
oCustomers.Add(new Customer { ID = 01, Name = "小明", Age = 6 });
oCustomers.Add(new Customer { ID = 02, Name = "小華", Age = 7 });
oCustomers.Add(new Customer { ID = 03, Name = "小鬼", Age = 8 });
//將 Grid 的資料來源設為泛型集合物件
this.dataGridView1.DataSource = oCustomers;
//這邊與 dataGridView 繫結同一個來源,在清單中,會預設繫結第一筆資料
txtID.DataBindings.Add("Text", oCustomers, "ID", true);
txtName.DataBindings.Add("Text", oCustomers, "Name", true);
txtAge.DataBindings.Add("Text", oCustomers, "Age", true);
//觀察表單上的 CurrencyManager 物件,繫結 CurrentChanged 事件,當項目繫結項目變更時,
//會觸發,並且 Show 出目前清單的位置。
CurrencyManager MyCurrencyManager = (CurrencyManager)this.BindingContext[oCustomers];
MyCurrencyManager.CurrentChanged += new EventHandler(MyCurrencyManager_CurrentChanged);
}
void MyCurrencyManager_CurrentChanged(object sender, EventArgs e) {
MessageBox.Show(((CurrencyManager)sender).Position.ToString());
}
輸出畫面
三小俠 小弟獻醜,歡迎指教