[C#] 資料繫結 (Data Binding)(一) 簡單資料繫結

  • 39073
  • 0
  • 2010-05-06

[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 介面

2010-01-23_135120

 

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

 

 

 

輸出畫面

2010-01-23_135452

 

 

Sample2 繫結至清單項目介面

Windows Forms 的資料繫結允許繫結至支援 IList 介面的資料清單 (例如: ComboBoxListBoxDataGridView…等等)

若是使用 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;
        }

 

輸出畫面

2010-01-23_141327

 

 

 

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

 

輸出畫面

2010-01-23_144220

 

程式碼 DemoDataBinding1.rar

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