学习DataBingds
参考 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 }
http://www.cnblogs.com/tianguook/archive/2013/06/18/3141762.html


浙公网安备 33010602011771号