VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • vb.net教程之数据的绑定

数据的绑定

VB.NET没有自己的类库,它依托的是.NET FrameWork SDK中的类库,虽然在.NET FrameWrok SDK中并没有提供在VB中的的DbLabel、DbComboBox等数据库组件,但.NET FrameWork SDK中提供了一种数据绑定技术,可以把打开的数据表中的某个或者某些字段绑定到在命名空间System.Window.Forms中定义的 WinForm组件(如TextBox组件、ComboBox组件、Label组件等)中的某些属性上,从而提供这些组件显示出数据表中的记录信息,也就实现了DbTextBox、DbComboBox等组件。

(一)数据绑定和Windows窗体基础知识

数据绑定指的是一个过程,即在运行时自动为包含数据的结构中的一个或多个窗体控件设置属性的过程。具体而言,是指Windows窗体使用ADO.NET进行数据绑定的过程。使用数据绑定,你无需显式编写实例化连接和创建数据集的代码(而使用非绑定窗体则必须这样做),与Windows窗体相关联的向导将为你编写必要的ADO.NET代码。
Windows窗体使用户可以轻松绑定到几乎所有包含数据的结构。这表示用户可以使用ADO.NET绑定到传统的数据存储区(如存储在Access或 SQL Server表中的数据),也可以绑定到从文件读取的、包含在其他控件的或存储在阵列中的数据结果。将窗体绑定到数据后,就可以将窗体上的控件绑定到特定的数据元素。最传统的数据绑定包括将文本框控件(TextBox)的Text属性绑定到数据源的列,还可以绑定Image控件的图形、控件的背景或窗体上任意控件的其他任意属性。
Windows窗体可以进行两种类型的数据绑定:简单数据绑定允许将控件绑定到单个数据元素;复杂数据绑定允许将多个数据元素绑定到一个控件。

(二)数据与控件的绑定

在VB.NET中要向控件绑定一个数据源,就必须为该控件设置DataBinding属性。该属性可以访问ControlBindingsCollection类,该类对每一个控件的绑定进行管理,并且具有很多属性和方法。
Add方法为控件创建一个绑定并将它加到ControlBindingsCollection中。Add方法有3个参数语法如下:
Object.DataBindings.Add(propertyname,datasource,datamember)
其中,Object表示窗体上的有效控件;Propertyname参数表示被绑定控件的属性;Datasource参数表示被绑定的数据源,可以是任何包含数据的有效对象如DataSet,DataView或者DataTable等;Datamember参数代表被绑定给控件的数据源中的数据字段。
1.绑定前的准备工作
(1)创建一个名为db1的Access数据库,数据表Student的结构如所示:
并在表中增加以下几条记录。如所示。
(2)创建和配置数据集:
创建项目,就可以创建和配置窗体所基于的数据集了。数据集是内存中包含表、关系和约束的缓存,其中的每个表均为列和行的集合。数据集能够识别其原始状态和当前状态,因此可以跟踪发生的变化。数据集中的数据被视为可更新数据。步骤如下:
新建一个名为myDataTest的vb.net项目,将表单的Name属性改为:“frmtest”;Text属性设为“数据绑定举例”。
在表单中增加一个OleDbDataAdapter控件。这时会自动弹出“数据适配器配置向导”对话框。点击“下一步”选择“新建连接”将弹出相应的对话框,选择“Microsoft Jet 4.0 OLE DB Provider”选项,点击“Next”按钮,设定数据源。在这里设置好你的数据源后点击“OK”按钮。
在打开的对话框中选择你的数据连接,设置完毕后点击“下一步”按钮创建SQL查询语句。在SQL生成器输入中输入以下语句,并点击“完成”。此时就完成与数据源的连接工作。
SELECT StuID, StuName, StuSex, StuBorn, StuCore FROM student
在窗体的组件栏中将显示名为OleDbConnection1的OleDbConnection对象和名为OleDbDataAdapter1的 OleDbDataAdapter对象。其中,OleDbConnection1对象包含有关如何访问选定数据库的信息。 OleDbDataAdapter1对象包含一个查询,它定义了要访问的数据库中的表和列。
(3)生成数据集类:
点击“数据→生成数据集”菜单命令,此时将出现“生成数据库”对话框。在“新建”框中myDataSet作为要创建的新数据集的名称。确保选中“将此数据集添加到设计器”选项。点击 “确定”按钮。这样即可生成数据集。
完成上述步骤,在窗体的组件栏上将显示一个新的控件myDataSet1。此控件是myDataSet.xsd文件的一个引用,该文件也被添加到“解决方案资源管理器” 窗口中。
到此,准备工作结束。我们就可以将数据集绑定给控件来显示数据集中所包含的数据了。
2.绑定到DataGrid控件
(1)在窗体中增加一个DataGrid控件,调整其大小与窗体相符。并对应以下设置修改其相关属性:
DataSource属性为myDataSet1;Datamember属性为student。
完成上述步骤,即将数据集绑定到数据网格控件中了。只需再完成一个步骤,就可以看到数据网格控件中显示的数据了。
(2)虽然数据网格控件已被绑定到数据集上,但加载窗体时并不会自动填充数据集。加载窗体时,请使用窗体的Load事件过程,在数据网格控件中填充数据。代码如下:
Private Sub frmtest_Load( ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'加载数据网格控件
MyDataSet1.Clear()
OleDbDataAdapter1.Fill(mydataset1,″student″)
End Sub
在Load事件过程中,首先需要清除数据集,然后用先前创建的OleDbDataAdapter1对象的Fill方法填充数据集。需要将表名传递给第二个参数,因为数据网格控件将使用第二个参数检索以前在DataMember属性中指定的正确DataMember (student)。
(3)现在,我们可以来看看我们的成果了,试运行一下程序。
在“解决方案资源管理器”窗口中,右击项目名称,从快捷菜单中选择“属性”命令,在打开的对话框中点击“启动对象”组合框并从列表中选择“frmtest”选项。然后点击“确定”按钮。最后按下F5键即可运行此项目。
3.绑定到TextBox控件
在上面我们介绍的实例窗体frmtest上删除DataGrid控件,并清除frmtest_Load中的代码。按照所示设计程序界面。
上图中各控件相关属性是:()
(其余的控件,我们将在下面的内容中用到。)
界面创建完成以后,我们就可以把数据集绑定到每个TextBox控件上了。步骤如下:
(1)选择要绑定的TextBox控件。按下F4键查看其“属性” 窗口。点击展开“DataBindings”属性,在“DataBindings” 中选择Text属性。
(2)打开组合框并将各个文本框绑定到相应的字段。如需要将“TxtStuID”文本框绑定到StuID字段,请点击myDataSet1上的“+”号,再点击 student上的“+”号,然后选择StuID字段。
(3)按照上述方法把其他几个文本框绑定到相应的字段上。
需要说明的是:虽然已绑定各个字段但还必须编写代码才能在首次加载窗体时用数据填充窗体。代码如下:
Private Sub frmtest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MyDataSet1.Clear()
OleDbDataAdapter1.Fill(MyDataSet1, ″student″)
End Sub
按下F5键试运行一下程序。仔细观察一下运行结果我们就会发现,程序在实现时自动用数据集中的第一条记录来填充各件控件。

(三)用代码实现数据绑定

上面我们着重探讨了控件与数集据绑定的向导模式。这种模式虽然实现方法简单,但是却不灵活,可移植性较差。为此,我们为大家介绍如何用代码来实现数据绑定。用代码实现数据绑定的优点在于灵活自由,代码移植方便。
为了便于更好的理解,我们仍然选用“TextBox”控件作为实例来介绍。
1.绑定到TextBox控件
(1)界面设计:
新建一个项目,按照的方法设置程序界面,再增加一个Button控件,将其“Text“属性设为“TextBox数据绑定”。
(2)代码实现:
'指定程序中引用的名称空间:在代码窗中输入:
Imports System.Drawing
Imports System.Windows.Forms
Imports System.ComponentModel
Imports System
Imports System.Data.OleDb
Imports System.Data
'首先定义全局变量myDataSet及GetConnected()方法,代码如下:
Public Class Form1
Inherits Form
Private WithEvents Button1 As Button
Private TextBox1 As TextBox
……(省略部分自动生成代码)
   Private myDataSet As DataSet
Private components As System.ComponentModel.Container
Public Sub New()
MyBase.New()
GetConnected() '这个过程是用于建立连接,打开数据库
InitializeComponent()
End Sub
'清除在程序中使用过的资源
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
……(省略部分自动生成代码)
End Sub
'
'为GetConnected()方法增加代码,用来打开数据表,返回数据集。
Public Sub GetConnected()
'创建一个 OleDbConnection
Dim ConnectionString As String = ″ Provider = Microsoft.Jet.OLEDB.4.0; Data Source = e:\My Documents\db1.mdb″
Dim myConn As OleDbConnection = New OleDbConnection()
myConn.ConnectionString = ConnectionString
Dim strCom As String = ″ SELECT * FROM student ″
'创建一个 DataSet
myDataSet = New DataSet()
myConn.Open()
'用 OleDbDataAdapter 得到一个数据集
Dim myCommand As OleDbDataAdapter = New OleDbDataAdapter(strCom, myConn)
'把Dataset绑定student数据表
myCommand.Fill(myDataSet, ″student″)
'关闭此OleDbConnection
myConn.Close()
End Sub
'初始化窗体中的组件
Private Sub InitializeComponent()
……(省略部分自动生成代码)
End Sub
'将各个文本框控件绑定到数据库的各个字段。
Private Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
TxtStuID.DataBindings.Add(New Binding(″Text″, Me.myDataSet, ″student.StuID″))
TxtStuName.DataBindings.Add(New Binding(″Text″, Me.myDataSet, ″student.StuName″))
TxtStuSex.DataBindings.Add(New Binding(″Text″, Me.myDataSet, ″student.StuSex″))
TxtStuBorn.DataBindings.Add(New Binding(″Text″, Me.myDataSet, ″student.StuBorn″))
TxtStuCore.DataBindings.Add(New Binding(″Text″, Me.myDataSet, ″student.StuCore″))
End Sub
End Class
Module Module1
Sub Main()
Application.Run(New Form1())
End SubEnd Module
编译后运行程序,看看是不是与上面介绍的实例运行结果相同。
在上面的代码中,我们新建了一个GetConnected()过程,用于建立连接,打开数据库。在用代码实现数据绑定或者对数据库进行任何操作前,就必须要先建立连接,打开数据库,程序运行结束后再关闭数据连接。
在Button1_Click过程中,我们把“TextBox”控件绑定到数据集myDataSet中“student”的各个字段上。
程序运行后,点击“TextBox数据绑定”按纽,程序就会用myDataSet中“student”中的数据来自动填充文本框。
2.绑定到Label控件
有了上面的内容做基础,再来讨论如何把数据集绑定到Label控件上就显得很简单了。把数据绑定到Label控件的方法与绑定到TextBox控件的方法大同小异。此处不再详细讲解,只给出代码实现绑定到Label控件的核心部分代码。
Private Sub Button1_Click (ByVal sender As Object , _
ByVal e As System.EventArgs ) Handles Button1.Click
'把student表的StuName字段绑定到Label1的Text属性上。
Label1.DataBindings.Add ( New Binding ( ″Text″ , Me.myDataSet , ″student.StuName″ ) )
End Sub
3.绑定到ComboBox控件
上面介绍的是对组件的简单数据绑定,对组件的复杂数据绑定和它有所区别,也有所相同,具体如下:
(1)要对ComboBox组件实现数据绑定,首先也是要打开数据表,得到数据集。这和上面TextBox组件的代码大致一样,在此略过。
(2)实现数据绑定:
设定了ComboBox组件的三个属性就可以实现数据绑定了,这三个属性是“DataSource”、“DisplayMember”、 “ValueMember”。其中DataSource表示指定的数据集;DisplayMember表示ComboBox组件显示的字段值; ValueMember表示ComboBox组件选择后的值。这三个属性的具体使用方法如下:
ComboBox1.DataSource = Me.myDataSet
ComboBox1.DisplayMember = ″studnet.StuName″
ComboBox1.ValueMember = ″ studnet.StuName ″
下面我们就来看看把数据集绑定到ComboBox控件的核心代码:
Private Sub Button1_Click ( ByVal sender As Object , _
ByVal e As System.EventArgs ) Handles Button1.Click
ComboBox1.DataSource = Me.myDataSet
ComboBox1.DisplayMember = ″student.StuName″
ComboBox1.ValueMember = ″ student.StuName ″
End Sub
注意:对ComboBox控件进行数据绑定的方法同样适用于ListBox控件,因此关于LisBox控件数据绑定方法本文将不再介绍。需要者请参阅ComboBox相关内容。

相关教程