[c#] 資料繫結 (Data Binding)(三) 同步化注意事項與資料變更的反應時機

  • 9403
  • 0

[c#] 資料繫結 (Data Binding)(三) 同步化注意事項與資料變更的反應時機

Introduction

在之前的文章都有用到這些技巧,不過仍然有一些值得我們在使用上注意的地方。先列出文件

 

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);
        }

輸出結果

2010-01-30_145247

 

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();
        }

 

輸出結果

2010-01-30_145743

 

程式碼下載TestCurrencyManager.rar

三小俠  小弟獻醜,歡迎指教