学习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     }
View Code

http://www.cnblogs.com/tianguook/archive/2013/06/18/3141762.html

posted @ 2017-07-09 09:52  高金顶  阅读(683)  评论(0)    收藏  举报