在本节中,我们将一步一步地学习创建作为数据源的数据识别类的过程。本例将绑定一个TextBox控件到数据源类中,以显示数据。下一节,“创建数据使用者”,将演示如何将数据源类绑定到某个数据使用者类。
本节中示例的代码来自于数据识别类示例(Dataware.vbp)。用户Samples目录中找到它。
创建一个数据源的过程分为两步。第一步将创建数据源类;第二步将把它挂接到某个TextBox控件上,以显示输出。
创建源类的第一步是定义一个新类,并给予其必要的属性和方法以提供数据:
属性设置值
NameMySource
DataSourceBehaviorvbDataSource
当 DataSourceBehavior 被设置为 vbDataSource 时,一个新的 Sub 过程 GetDataMember 就被添加到类模块中。用户只要在代码编辑器中选择“对象”列表中的“类”,然后选择“事件”列表,即可看到此情况。
Option Explicit
Private rs As ADODB.Recordset
这声明一个对象变量为ADO Recordset对象。
Private Sub Class_Initialize() Dim strPath As String, strName As String Dim i As Integer '
创建Recordset
的一个实例。Set rs = New ADODB.Recordset
'
设置Recordset
的属性。With rs
.Fields.Append "DirID", adInteger
.Fields.Append "Directory", adBSTR, 255
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open
End With
'
在各目录中循环,并充填Recordset
strPath = "C:\"
strName = Dir(strPath, vbDirectory)
i = 0
Do While strName <> ""
If strName <> "." And strName <> ".." Then
If (GetAttr(strPath & strName) And _
vbDirectory) = vbDirectory Then
i = i + 1
With rs
.AddNew
.Fields.Item("DirID") = i
.Fields.Item("Directory") = strName
.Update
End With
End If
End If
strName = Dir
Loop
'
返回到第一个记录。rs.MoveFirst
End Sub
在本例中用户将迅速创建一个ADO Recordset对象,并用一个目录列表来充填之。此外,用户也可以使用一个现存的recordset,方法是把它分配Initialize事件中ADO Recordset的Connect属性。
Private Sub Class_GetDataMember(DataMember As String, Data As Object) '
将Recordset
分配给Data
对象。Set Data = rs
End Sub
GetDataMember 过程设置类的数据源。数据源类可以提供多个数据源,方法是将一个 Select Case 语句添加到 GetDataMember 过程中,并在 DataMember 参数中传入一个源名。
Public Sub Cycle() '
在Recordset
中循环。rs.MoveNext
If rs.EOF = True Then
rs.MoveFirst
End If
End Sub
为了在 recordset 中移动,用户需要显露所创建类的浏览方法。为了简单起见,本示例只能在 recordset 中向前循环。为了使得该类更加实用,您可能想要显露象MoveFirst、MoveNext、Add,以及Delete这样的方法。
现在已对源类作了定义,我们可以用它来做些有用的事情了。在本例中,我们将把它绑定到某个TextBox控件上,这样就可以看到其输出了;我们还将使用一个CommandButton来执行我们的Cycle方法。
属性设置值
NametxtConsumer
Text(blank)
属性设置值
NamecmdCycle
CaptionCycle
Data Binding Collection所提供的DataBinding对象是将一个数据源绑定到某个数据使用者的“粘合剂”。
Option Explicit
Private objSource As MySource
Private objBindingCollection As BindingCollection
需要用事前绑定来声明源类(MySource)和BindingCollection对象。
Private Sub Form_Load() Set objSource = New MySource Set objBindingCollection = New BindingCollection '
将源类分配给Binding Collection
的DataSource
属性。Set objBindingCollection.DataSource = objSource
'
添加一个绑定。ObjBindingCollection.Add txtConsumer, "Text", "Directory"
在Load事件中,我们创建了源类和BindingCollection对象的实例,然后将源对象分配给BindingCollection的DataSource属性。最后,我们添加一个绑定,方法是指定使用者名 (txtConsumer)、被绑定的使用者的属性(即Text属性),以及要绑定到的源对象的Field属性 (Directory)。
Private cmdCycle_Click() '
调用数据源的Cycle
方法。ObjSource.Cycle
End Sub
这将执行源类的 Cycle 方法。
单击“Cycle”按钮时,源类所创建的recordset的目录名将出现在TextBox中。祝贺您──您刚刚在未使用Data控件的情况下,将一个控件绑定到某个数据源类上!
将源类保存为 "MySource.cls"。
将窗体保存为 "Dataform.frm"。
将工程保存为 "Dataware.vbp"。
这些文件都将在后面的“创建数据使用者”中用到。
在下一节“创建数据使用者”中,我们将讨论创建一个作为数据使用者的数据识别类的过程。