将SQLServer数据库中的Image字段绑定到PictureBox控件及DataBindings属性

对于文本类字段,可以使用使用如下代码绑定数据:

'textbox1的数据源,name是数据库中的字段,dt是datatable
Me.TextBox1.DataBindings.Add("Text", dt, "name")

但对于图像字段,使用如下代码则是错误的:

'picturebox1的数据源,Picture是数据库字段名,dt是DataTable
Me.PictureBox1.DataBindings.Add("Image", dt, "Picture", True)

可以使用如下的代码将Image类型的数据绑定到PictureBox控件:

'picturebox1的数据源,Picture是数据库字段名,dt是DataTable
Me.PictureBox1.DataBindings.Add(New Binding("Image", dt, "Picture", True))

转载文章:

用DataBindings属性绑定控件的值

 

  WinForm中的很多控件,如Label、TextBox等都包含DataBindings属性,其类型为ControlBindingsCollection,是Binding类的集合。Binding类代表某对象属性值和某控件属性值之间的简单绑定。如可以将TextBox的Text属性值绑定到Label的Text属性值,这样,当TextBox中的文本被修改的时候,Label的文本也会及时进行修改,如下面的代码所示:

label1.DataBindings.Add("Text", textBox1, "Text");

  Binding类除了可以将对象的属性绑定到控件的属性之外,还可以将对象列表中当前对象的属性值绑定到控件的属性。

  当使用Binding的构造函数创建实例时,必须指定三项内容:

  • 要绑定到的控件属性的名称
  • 数据源
  • 数据源中解析为列表或属性的导航路径

其中,数据源可以为:

  • 实现 IBindingList 或 ITypedList 的任何类。包括:DataSet、DataTable、DataView 或 DataViewManager。
  • 实现 IList 的任意索引集合类。(必须在创建 Binding 之前创建和填充该集合,并且列表中的所有对象必须为同一类型,否则将引发异常)
  • 强类型对象的强类型 IList。

  导航路径可以为空字符串(默认将调用数据源的ToString()方法)、单个属性名称或用点分隔的名称层次结构。

  名称层次结构是什么意思呢?比如我们有一个Company类,它包含Name属性和Employees属性(公司所有Employee的集合),而Employee类又包含Name属性。那么,如果要将Company的Name属性绑定到TextBox控件的Text属性,代码为:

TextBox1.DataBindings.Add("Text", company, "Name");
如果要绑定Employees的Name属性,代码为:
TextBox1.DataBindings.Add("Text", company, "Employees.Name");
Employess.Name即为用点分隔的名称层次结构。在这里,Employees为一个集合,将Employees.Name绑定到TextBox会出现什么情况呢?测试后可知,TextBox将显示Employees集合中第一个Employee的Name属性。

  Binding类包含两个十分重要的事件:Format和Parse,可以创建自定义的格式来显示数据。具体可以参考MSDN。

  问题:如果将TextBox2的Text属性作为数据源绑定到TextBox1的Text属性,那么修改TextBox1的Text之后,将焦点移动到TextBox2上,其Text值就变为TextBox1的Text值了。这一点如何解决,我还没有找到比较好的方法,用Parse事件似乎也不行

posted on 2011-06-27 16:41  水光  阅读(1641)  评论(0编辑  收藏  举报

导航