Private Sub Form_Load()
Dim a(2, 9) As String
For i = 0 To 2
For j = 0 To 9
a(i, j) = i & "," & j
Next
Next
Dim adoRecordset As new ADODB.RecordsetFor i = 0 To 2 '为 DataGrid 添加三列
adoRecordset.Fields.Append "第" & i & "列", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
Next i
adoRecordset.Open
For i = 0 To 9
adoRecordset.AddNew '为 DataGrid 添加十空行
Next i
Set DataGrid1.DataSource = adoRecordset '绑定 DataGrid 的数据源
adoRecordset.MoveFirst
For j = 0 To 9
For i = 0 To 2
DataGrid1.Columns(i).Text = a(i, j)
Next
adoRecordset.MoveNext
Next
End Sub
Dim a(2, 9) As String
For i = 0 To 2
For j = 0 To 9
a(i, j) = i & "," & j
Next
Next
Dim adoRecordset As new ADODB.RecordsetFor i = 0 To 2 '为 DataGrid 添加三列
adoRecordset.Fields.Append "第" & i & "列", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
Next i
adoRecordset.Open
For i = 0 To 9
adoRecordset.AddNew '为 DataGrid 添加十空行
Next i
Set DataGrid1.DataSource = adoRecordset '绑定 DataGrid 的数据源
adoRecordset.MoveFirst
For j = 0 To 9
For i = 0 To 2
DataGrid1.Columns(i).Text = a(i, j)
Next
adoRecordset.MoveNext
Next
End Sub
解决方案 »
- ODBC在64位系统上读取dbf文件失败
- 怎么使用代码生成webbrowser,又怎么使用该生成的控件打开网页?
- 我用ActiveReport做打印页开始好用,可是现在弹出“Error 5007 : No Printer Installed. Using default papersize.”的错误,但还好用。
- 总信誉分是怎么计算的啊,我每天都在网上泡,不关掉会扣分吗?我怎么来提高总信誉分啊。
- vb中的string问题
- 我的小问题啊!(看学VB,请多指教)
- 急!如何实现用VB调用水晶报表,并打印取定的某条记录集!
- 求救,如何屏蔽del键和删除键
- vb编译的dll能调试吗
- ifix中mousedown和mouseup事件冲突如何解决?
- DataGrid1_Click 的一个小问题
- 这是为什么呢?关于datagride的刷新问题
下面的示例使用一个类模块来创建一个简单数据源。然后通过 DataSource 属性将 DataGrid 控件绑定到该模块。要创建一个用于DataGrid 的类 创建一个新的标准 Exe 工程。
给窗体添加一个 DataGrid 控件。
如果“DataGrid”控件不在“工具箱”中,则在“工程”菜单中单击“部件”,再单击“Microsoft DataGrid Control”,然后单击“确定”。在“工程”菜单中,单击“引用”。在“引用”对话框中,单击“Microsoft ActiveX Data Objects 2.0 Library”。
在“工程”菜单中,单击“添加类模块”来给工程添加一个数据类模块。
在“工程资源管理器”窗口中,单击并选定“类”图标,并按 F4 键显示“属性”窗口。
在“属性”窗口中,将类的名称更改为NamesData。
在“属性”窗口中,单击“DataBehavior”并将该属性更改为vbDataSource。
在该类模块的 Declarations 部分,创建一个 ADODB Recordset变量,如下所示:
Option Explicit
Private WithEvents rsNames As ADODB.RecordSet使用 WithEvents 关键词来声明该变量,使用户可以对 RecordSet 对象的事件编程。在该类的 Initialize 事件中,添加下述代码:
Private Sub Class_Initialize()
' 将新的数据成员的名称添加到 DataMember 集合
' 这使其它对象可以看见这些可用的 DataMembers
DataMembers.Add "Names" Set rsNames = New ADODB.RecordSet ' 设置对象变量。' 创建一个具有两个字段的 recordset,并打开该 recordset。
' 第一个记录具有一个整数的数据类型,第二个记录是一个最大可
' 达 256 个字符的字符串。CursorType 被设置为 OpenStatic
' -- 一个可更新的对一组记录的快照。LockType 被设置为
' LockOptimistic,以允许对该 recordset 进行更新。
With rsNames
.Fields.Append "ID", adInteger
.Fields.Append "Name", adBSTR, 255
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open
End WithDim i As Integer
For i = 1 to 10 ' 添加十条记录。
rsNames.AddNew
rsNames!ID = i
rsNames!Name = "Name " & i
rsNames.Update
Next i
rsNames.MoveFirst ' 移到该记录集的开始。
End Sub这部分代码首先创建 recordset 对象,然后给该对象添加两个字段。代码接着给 recordset 添加十条记录。在该类的 GetDataMember 事件中,添加下述代码:
Private Sub Class_GetDataMember(ByVal DataMember As String, _
Data As Object)
Set Data = rsNames
End Sub只要发生该事件—即当该类对象被绑定到一个数据使用者,如 DataGrid 控件时,代码将返回该 recordset 对象。在 Form 对象的代码模块中,声明一个数据类的对象变量:
Option Explicit
Private datNames As NamesData ' 类变量在 Form 对象的 Load 事件的代码中,将 DataGrid 控件的 DataSource 设置为该类对象。
Private Sub Form_Load()
' 创建一个新的 NamesData 对象
Set datNames = New NamesData
' 将这个 DataGrid 绑定到新的数据源 datNames
Set DataGrid1.DataSource = datNames
End Sub按 F5 键运行该工程。
结果集事件的编程
也可以对这个 Recordset 对象的事件进行编程。在该类模块中,单击“对象”框(在位于左上角),然后单击“rsNames”。在“过程/事件”框(在右上角)中,下拉列表将显示这个 Recordset 对象的所有事件。给类添加一个属性
类模块也可以进行修改,来响应事件或函数调用。下面的代码演示了如何先给类添加属性。当从其它对象调用该对象时,这一属性将返回该类的 RecordCount。Public Property Get RecordCount() As Long
RecordCount = rsNames.RecordCount
End Sub使用 DataMember 属性
GetDataMember 事件也包括 DataMember 参数。使用这个参数,可以在类模块中包括多个记录集,并使用带 DataMember 参数的 Select Case 语句来返回相应的记录集:Private Sub Class_GetDataMember(ByVal DataMember As String, Data As _
Object)
Select Case DataMember
Case "Names"
Set Data = rsNames
Case "Dates"
Set Data = rsDates
Case Else
' 设置一个默认的数据成员
Set Data = rsYears
End Select
End Sub如果要指定所需的 DataMember,请将数据使用者的 DataMember 属性设置为适当的字符串,然后如平常一样设置 DataSource。对于 DataGrid 控件,可以采用如下方法:Private Sub Form_Load()
' 创建一个新的 NamesData 对象
Set datNames = New NamesData' 指定所需的 DataMember,然后设置 DataSource。
DataGrid1.DataMember = "Names"
Set DataGrid1.DataSource = datNamesEnd Sub
Dim i As Integer
If DataGrid1.Row >= 0 Then
Vsearch = DataGrid1.Columns(0).Text
For i = 0 To Vnum
If Vsearch = Skycard(i, 1) Or Vsearch = Skycard(i, 1) & "," & Skycard(i, 2) Then
List1.List(0) = Vsearch
End If
Next i
End If
End Sub请问为什么我每次从Vsearch获得的值都是前一次点击获得的?
Dim i As Integer
If DataGrid1.Row >= 0 Then
Vsearch = DataGrid1.Columns(0).Text
For i = 0 To Vnum
If Vsearch = Skycard(i, 1) Or Vsearch = Skycard(i, 1) & "," & Skycard(i, 2) Then
List1.List(0) = Vsearch
End If
Next i
End If
End Sub