当前位置导航:炫浪网>>网络学院>>编程开发>>Visual Basic教程

探讨VB.Net中的数据绑定技术

  
  VB.Net是没有自己的类库的,他依托的类库是.Net FrameWork SDK中的类库,虽然在.Net FrameWrok SDK中并没有提供在Visual Basic中的的DbLabel、DbCombox等如此的数据库组件,但.Net FrameWork SDK中提供了一种数据绑定技术,可以把打开的数据表中的某个或者某些字段绑定到在命名空间System.Window.Forms中定义的WinForm组件(譬如:TextBox组件、ComBox组件、Label组件等)中的某些属性上,从而提供这些组件显示出数据表中的记录信息,也就实现了DbTextBox、DbCombox等组件。本文就是来探讨一下,如何在VB.Net中实现数据绑定。为了更清楚的说明问题,在讨论绑定的时候,在数据库的选择上,不仅选用了本地数据库Access 2000,而且也选用了远程数据库SQL Server 7.0。由于WinFrom组件比较多,但他们实现数据绑定的方法基本是一样的,在本文中,选用了三个比较常用的WinForm组件为代表,即:TextBox组件、ComBox组件和ListBox组件。
  
  一.数据库的数据结构:
  
  Access数据库名称为"Sample.mdb",里面定义了一张"books"的数据表,字段属性为下表:
  
 

  Sql Server 7.0的数据库服务器名称为"server1",数据库名称为"data1",在此数据库中也有一张"books"表,字段的属性同上。
  
  二.程序设计和运行的环境设置:
  
  视窗2000服务器版
  
  Microsoft Data Acess Component 2.6 以上版本 ( MDAC 2.6 )
  
  .Net FrameWrok SDK Beta 2版
  
  三.对TextBox组件进行数据绑定:
  
  在整个数据绑定中,对不同的组件可以大致分为二类,一类是简单型数据绑定,另外一种是复杂型数据绑定。简单型的数据针对的对象是TextBox组件、Label组件等,绑定后组件的显示的记录只有一条;而复杂型的针对对象是ListBox组件、TreeView组件等,往往绑定后显示出来的记录是比较多的。对于简单型的数据绑定可以参考本文中TextBox组件的绑定的过程。对于复杂型的绑定过程可以参考本文中的ComBox组件和ListBox组件的绑定过程。
  
  其实无论是和中数据绑定,首先要打开指定的数据表,得到数据集。下面语句是打开Access数据库中的"books"表,得到"myDataSet"数据集:
  '打开数据表,返回数据集
  public Sub GetConnected ( )
  '创建一个 OleDbConnection
  Dim strCon As String = " Provider = Microsoft.Jet.OLEDB.4.0; Data Source = ..\sample.mdb"
  Dim myConn As OleDbConnection = new OleDbConnection ( )
  myConn.ConnectionString = strCon
  
  Dim strCom As string = " SELECT * FROM books "
  '创建一个 DataSet
  myDataSet = new DataSet( )
  
  myConn.Open ( )
  '用 OleDbDataAdapter 得到一个数据集
  Dim myCommand As OleDbDataAdapter = new OleDbDataAdapter ( strCom , myConn )
  '把Dataset绑定books数据表
  myCommand.Fill ( myDataSet , "books" )
  '关闭此OleDbConnection
  myConn.Close ( )
  End Sub
  
  实现数据绑定:
  TextBox组件通过下列语句就可以把已经得到的数据集"myDataSet"中的"books.bookid"字段值绑定到TextBox1的"Text"属性上:
  TextBox1.DataBindings.Add ( New Binding ( "Text" , Me.myDataSet , "books.bookid" ) ) 了解了这二点,就不难实现对TextBox组件的数据绑定了。下面是实现对TextBox组件数据绑定的源程序代码(Text1.vb):
  Imports System.Drawing
  Imports System.Windows.Forms
  Imports System.ComponentModel
  Imports System
  Imports System.Data.OleDb
  Imports System.Data
  
  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 )
  If disposing Then
  If Not ( components Is Nothing ) Then
  components.Dispose ( )
  End If
  End If
  MyBase.Dispose ( disposing )
  End Sub
  '打开数据表,返回数据集
  public Sub GetConnected ( )
  '创建一个 OleDbConnection
  Dim strCon As String = " Provider = Microsoft.Jet.OLEDB.4.0; Data Source = ..\sample.mdb"
  Dim myConn As OleDbConnection = new OleDbConnection ( )
  myConn.ConnectionString = strCon
  
  Dim strCom As string = " SELECT * FROM books "
  '创建一个 DataSet
  myDataSet = new DataSet( )
  
  myConn.Open ( )
  '用 OleDbDataAdapter 得到一个数据集
  Dim myCommand As OleDbDataAdapter = new OleDbDataAdapter ( strCom , myConn )
  '把Dataset绑定books数据表
  myCommand.Fill ( myDataSet , "books" )
  '关闭此OleDbConnection
  myConn.Close ( )
  
  End Sub
  '初始化窗体中的组件
  Private Sub InitializeComponent ( )
  Me.Text = "对TextBox组件实现数据绑定!"
  Me.Width = 400
  Me.Height = 300
  
  Button1 = New Button ( )
  TextBox1 = New TextBox ( )
  
  Button1.Left = 200
  Button1.Top = 200
  Button1.Width = 100
  Button1.Height = 40
  Button1.TabIndex = 0
  Button1.Text = "数据绑定"
  
  TextBox1.Left = 200
  TextBox1.Top = 30
  TextBox1.Width = 150
  TextBox1.Height = 40
  
  Me.Controls.Add ( Button1 )
  Me.Controls.Add ( TextBox1 )
  
  End Sub
  
  Private Sub Button1_Click ( ByVal sender As Object , _
  ByVal e As System.EventArgs ) Handles Button1.Click
  TextBox1.DataBindings.Add ( New Binding ( "Text" , Me.myDataSet , "books.bookid" ) )
  End Sub
  End Class
  
  Module Module1
  Sub Main ( )
  Application.Run ( new Form1 ( ) )
  End sub
  End Module
  
  经过了下列语句编译后:
  vbc.exe /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll /r:system.data.dll
  /r:system.xml.dll text1.vb
  可以得到如下界面:
  
 

  
图01:对TextBox组件绑定后的程序界面

  把Sql Server 7.0上的字段绑定到TextBox的"Text"的属性上:
  有了上面的知识,可以非常方便的得出下列代码,和上面的代码的主要区别在于选用的数据库引擎不一样,由此如果你使用的是Oracle等数据库实现这种操作,也只需要改变数据连接就可以了,具体如下(Text2.vb):
  Imports System.Drawing
  Imports System.Windows.Forms
  Imports System.ComponentModel
  Imports System
  Imports System.Data.OleDb
  Imports System.Data
  
  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 )
  If disposing Then
  If Not ( components Is Nothing ) Then
  components.Dispose ( )
  End If
  End If
  MyBase.Dispose ( disposing )
  End Sub
  '打开数据表,返回数据集
  public Sub GetConnected ( )
  '设定数据连接字符串,此字符串的意思是打开Sql server数据库,服务器名称为server1,数据库为data1
  Dim strCon As String = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = data1 ; Data Source = server1 "
  Dim myConn As OleDbConnection = new OleDbConnection ( )
  myConn.ConnectionString = strCon
  
  Dim strCom As string = " SELECT * FROM books "
  '创建一个 DataSet
  myDataSet = new DataSet( )
  
  myConn.Open ( )
  '用 OleDbDataAdapter 得到一个数据集
  Dim myCommand As OleDbDataAdapter = new OleDbDataAdapter ( strCom , myConn )
  '把Dataset绑定books数据表
  myCommand.Fill ( myDataSet , "books" )
  '关闭此OleDbConnection
  myConn.Close ( )
  
  End Sub
  '初始化窗体中的组件
  Private Sub InitializeComponent ( )
  Me.Text = "对TextBox组件实现数据绑定!"
  Me.Width = 400
相关内容
赞助商链接