參考 http://blog.sina.com.cn/s/blog_4a54d07201019uoy.htmlWinForm中的很多控制項,如Label、TextBox等都包含DataBindings屬性,其類型為ControlBindingsCollection,是Binding類的集合,作用有2方 ...
參考 http://blog.sina.com.cn/s/blog_4a54d07201019uoy.html
WinForm中的很多控制項,如Label、TextBox等都包含DataBindings屬性,其類型為ControlBindingsCollection,是Binding類的集合,作用有2方面。一方面是用於與資料庫的數據進行綁定,進行數據顯示。另一方面用於與控制項或類的對象進行數據綁定。
主要用法是將某個對象的某個屬性與指定對象的指定屬性進行關聯,如下所示。
textbox1.DataBindings.Add(new Binding("Text", Program.AllData, "Name"));
將Program.AllData.Name屬性與textbox1進行綁定。綁定後,兩者有任意一個修改,另一個同時跟隨修改。
當使用Binding的構造函數創建實例時,必須指定三項內容:
要綁定到的控制項屬性的名稱、數據源、數據源中解析為列表或屬性的導航路徑
數據源可以為:
1、實現 IBindingList 或 ITypedList 的任何類。包括:DataSet、DataTable、DataView 或 DataViewManager。
2、實現 IList 的任意索引集合類。(必須在創建 Binding 之前創建和填充該集合,並且列表中的所有對象必須為同一類型,否則將引發異常)
3、強類型對象的強類型 IList。
導航路徑:1、空字元串(預設將調用數據源的ToString()方法) 2、單個屬性名稱
3、用點分隔的名稱層次結構。(TextBox1.DataBindings.Add("Text", company, "Employees.Name");)
Binding類包含兩個十分重要的事件:Format和Parse,可以創建自定義的格式來顯示數據。
1 public partial class Form1 : Form 2 { 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 MyDataSource mydataSource = new MyDataSource(); 8 public int Num { get; set;} 9 10 public List<BlogNew> blogNews { get; set; } 11 public BindingList<BlogNew> blogNewsRegardUI { get; set; } //應用於DataGridView界面UI更新 12 private void Form1_Load(object sender, EventArgs e) 13 { 14 //要綁定到textbox1的哪個屬性,數據源,數據源的屬性,是否要格式化數據,什麼時候啟用數據綁定 15 textBox1.DataBindings.Add("Text", trackBar1, "Value", false, DataSourceUpdateMode.OnPropertyChanged); 16 17 mydataSource.MyValue = "你好"; 18 textBox2.DataBindings.Add("Text", mydataSource, "MyValue", false, DataSourceUpdateMode.OnPropertyChanged); 19 20 21 Num = 5; 22 textBox3.DataBindings.Add("Text", this, "Num", false, DataSourceUpdateMode.OnPropertyChanged); 23 24 blogNews = new List<BlogNew>(); 25 blogNews.Add(new BlogNew { BlogID = 1, BlogTitle = "你好" }); 26 blogNews.Add(new BlogNew { BlogID = 2, BlogTitle = "我好" }); 27 blogNews.Add(new BlogNew { BlogID = 3, BlogTitle = "他也好" }); 28 dataGridView1.DataBindings.Add("DataSource", this, "blogNews", false, DataSourceUpdateMode.OnPropertyChanged); 29 30 blogNewsRegardUI = new BindingList<BlogNew>(); 31 blogNewsRegardUI.Add(new BlogNew { BlogID = 11, BlogTitle = "測試1" }); 32 blogNewsRegardUI.Add(new BlogNew { BlogID = 12, BlogTitle = "測試2" }); 33 blogNewsRegardUI.Add(new BlogNew { BlogID = 13, BlogTitle = "測試3" }); 34 dataGridView2.DataBindings.Add("DataSource", this, "blogNewsRegardUI", false, DataSourceUpdateMode.OnPropertyChanged); 35 } 36 private void button1_Click(object sender, EventArgs e) 37 { 38 MessageBox.Show(mydataSource.MyValue); 39 MessageBox.Show(textBox2.Text); 40 } 41 42 private void button2_Click(object sender, EventArgs e) 43 { 44 45 } 46 47 private void button1_Click_1(object sender, EventArgs e) 48 { 49 lblClassValue.Text = mydataSource.MyValue; 50 } 51 52 private void button2_Click_1(object sender, EventArgs e) 53 { 54 lblNumValue.Text = this.Num.ToString(); 55 } 56 57 private void button3_Click(object sender, EventArgs e) 58 { 59 //在這裡向DataGridView中插入一行 60 var data = dataGridView1.DataSource as List<BlogNew>; 61 data.Add(new BlogNew { BlogID = 4, BlogTitle = "新增一條" }); 62 63 foreach (BlogNew blogNew in dataGridView1.DataSource as List<BlogNew>) 64 { 65 /*********** 66 * 當我們心插入一條BlogID記錄為4的數據的時候,在界面上可以看出dataGridView1的dataSource已經被更新, 67 * 但是界面上依舊顯示為BlogID為1,2,3三條數據,很奇怪 68 * *********************/ 69 MessageBox.Show(blogNew.BlogID + "--" + blogNew.BlogTitle); 70 } 71 } 72 73 private void button4_Click(object sender, EventArgs e) 74 { 75 //這裡主要用來解決DataGridView1界面不更新的問題,其實原因在於使用了List<BlogNew>,這裡我們採用BindList<BlogNew> 76 //*通過測試,我們發現,只要數據源改變,界面就可以自動的進行更新了,很是方便,不需要重新綁定 77 var dataRegardUI = dataGridView2.DataSource as BindingList<BlogNew>; 78 dataRegardUI.Add(new BlogNew { BlogID = 20, BlogTitle = "刷新界面" }); 79 } 80 81 82 } 83 84 public class MyDataSource 85 { 86 public string MyValue { get; set; } 87 } 88 89 public class BlogNew 90 { 91 public int BlogID { get; set; } 92 public string BlogTitle { get; set; } 93 }View Code
http://www.cnblogs.com/tianguook/archive/2013/06/18/3141762.html