[c#] 資料繫結 (Data Binding)(三) 同步化注意事項與資料變更的反應時機
Introduction
在之前的文章都有用到這些技巧,不過仍然有一些值得我們在使用上注意的地方。先列出文件
- CurrencyManager 類別:管理 Binding 物件的清單。
- DataSourceUpdateMode 列舉型別 :指定在繫結控制項中發生變更時,資料來源何時更新。
Examples
sample1 CurrencyManager 使用了不同的巡覽路徑(同步化注意事項)
雖然資料來源皆是同一個,不過若是設定的巡覽路徑不同,會各自同步化。
Form1.cs
private void Form1_Load(object sender, EventArgs e) {
// 建立一個資料集,並於其中建立一個資料表。
DataSet myDataSet = new DataSet();
DataTable myDataTable = myDataSet.Tables.Add("學生資料");
myDataTable.Columns.Add("姓名", Type.GetType("System.String"));
myDataTable.Columns.Add("年齡", typeof(int));
//建立資料
myDataTable.Rows.Add("小明",12);
myDataTable.Rows.Add("小華", 15);
myDataTable.Rows.Add("小鬼", 10);
//設定資料來源,注意巡覽路徑
dataGridView_Left.DataSource = myDataSet;
dataGridView_Left.DataMember = myDataSet.Tables[0].ToString();
//繫結資料
txtNameLeft.DataBindings.Add("Text", myDataSet, "學生資料.姓名", true);
txtAgeLeft.DataBindings.Add("Text", myDataSet, "學生資料.年齡", true);
//設定資料來源,注意巡覽路徑
dataGridView_Right.DataSource = myDataTable;
//繫結資料
txtNameRight.DataBindings.Add("Text", myDataTable, "姓名", true);
txtAgeRight.DataBindings.Add("Text", myDataTable, "年齡", true);
}
輸出結果
sample2 (資料變更的反應時機)
示範如何使用更新資料來源的時機。
Form2.cs
private Binding sizeBinding;
private void Form2_Load(object sender, EventArgs e) {
DataTable myTable = new DataTable();
myTable.Columns.Add("品名", Type.GetType("System.String"));
myTable.Columns.Add("價格", typeof(decimal));
//建立一筆資料
myTable.Rows.Add("西瓜", 80m);
//設定資料來源
errorProvider1.DataSource = myTable;
//繫結資料,設定只要控制項屬性的值變更,資料來源就會更新
txtName.DataBindings.Add("Text", myTable, "品名", true,DataSourceUpdateMode.OnPropertyChanged);
txtPrice.DataBindings.Add("Text", myTable, "價格", true, DataSourceUpdateMode.OnPropertyChanged);
// 將 TextBox 控制項的 Text 屬性繫結至表單的 Size 屬性,並且將輸入控制項的值設定為不驗證。
sizeBinding = new Binding("Text", this, "Size", true, DataSourceUpdateMode.Never);
this.txtFormSize.DataBindings.Add(sizeBinding);
}
private void btnSetFormSize_Click(object sender, EventArgs e) {
//從控制項讀取資料並且寫入資料來源
sizeBinding.WriteValue();
}
輸出結果
三小俠 小弟獻醜,歡迎指教