.Net 中Textbox控件的数据绑定

   .Net的数据绑定还是挺博大精深的,最常用的就是绑定一个DataTable到一个DataGridView上面,不过这个不是本文的重点,本文主要介绍如何绑定一个实体类的某个字段到TextBox上,这在实际应用中是最常见的。如果代码中改变实体类的一个字段的值,界面上能够相应改变,反之,如果用户改变界面上的值,实体类能够自动改变,这能够极大的减轻编程的工作量。

   TextBox有个DataBindgs属性,用来设置绑定。它的使用很简单,只需要使用textBox.DataBings.Add()方法来为其设置绑定。Add方法有一个重载是接受一个Binding对象,还有一个是接受三个参数,分别是要绑定到TextBox的哪个属性上,哪个对象是数据源,绑定数据源的哪个字段。例如有下列实体类:

 
 
 
 
 
 
 
 
 
 
 
 
 
 

首先新建一个WindowsApplicaton项目,在一个空白的Form上面放上一个TextBox和两个Button,其中一个button用来显示实体类的值,另一个button用来在代码中改变实体类的值。代码如下:

public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }
       Entity obj = new Entity();
       private void Form1_Load(object sender, EventArgs e)
       {          
           textBox1.DataBindings.Add("Text", obj, "Field");      

       }

       private void button1_Click(object sender, EventArgs e)
       {
           MessageBox.Show(obj.Field);
       }

       private void button2_Click(object sender, EventArgs e)
       {
           obj.Field = "wow";
           
       }
   }

test

运行程序可以发现,如果用户改变文本框中的值,点击button1可以看到实体类的值已经改变,然而点击button2之后文本框的值却没有改变。这仅仅实现了单向的绑定。

     经过尝试,发现如果要实现双向绑定,对数据源有一定的要求,例如,如果数据源实现了INotifyPropertyChanged 接口就可以。这个接口位于System.CompomentModel命名空间中,这个接口很简单,只有一个事件。不过它提供了一种机制可以通知被绑定的对象,数据源已经发生了改变。下面的代码是实现了这个接口的实体类:

 
  
  
 

把实体类改成这样之后,再运行一下程序,就可以发现点击button2的时候textbox的内容立刻发生了改变。

    我查了下msdn,我没有找到在何处msdn明确说明实现了INotifyPropertyChanged接口的实体类可实现双向绑定,或许是在深入剖析数据绑定的文章中说的吧。我想到这样做是参考了Linq设计器自动生成的代码。

    下一篇打算研究下绑定的文本框(包括其他类型的控件)如何进行数据验证。还打算写一篇如何绑定DataTable或者IList<T>类型的数据源。

转载于:https://www.cnblogs.com/yinzixin/archive/2009/11/06/1597643.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值