DataGrid控件的使用四
上一篇 / 下一篇 2007-03-06 11:36:07 / 个人分类:vb
4X+u iA!m H0D1atQ0 使用 Bookmarks 和 SelBookmarks 跟踪记录51Testing软件测试网
_V
i!TcGn1x3XF
Bookmarks 和 SelBookmarks 提供了标记记录的一种手段。当编写应用程序中的特定功能(诸如允许最终用户手工地选择多个不相邻的记录,进行所选记录的大批更新)时,这就很有必要。在这些情形中,需要标记哪些记录已被选择,因此可以使用 SelBookmarks 集合及其属性。
%r?
x qV0 有两个函数,分别是 CellText 和 CellValue 方法,需要标记才能正确执行。
#Di$c$B#a8rS051Testing软件测试网7M1W\ x!XNF-W
标记用户的选择51Testing软件测试网&o/oq3{h\
SelBookmarks 集合包含所有选定的记录的书签。当最终用户手工选择记录时(即在单击时按住 CTRL 键),每一个选定的记录的书签都会加入到该集合中。使用标准的循环,用户可以知道已经选定了什么,也可以保存书签(因为可能需要恢复某个值),以及执行操作:
o0Rl~ su0wnN!de*g0 Dim i as Integer '' 计数器
J"u3O,uuG&v0 Dim intCount As Integer
-lv,o8W[nmr0 intCount = DataGrid1.SelBookmarks.Count - 1
em m%o`iWN0 ReDim arrSelBK(intCount) '' 声明用于保存书签的数组。51Testing软件测试网_"z^}R s
For i = 0 To intCount51Testing软件测试网dIc9A5_
ArrSelBK(i) = DataGrid1.SelBookmarks(i)51Testing软件测试网 h6pX"U(j7^!p7a
'' 在此处执行操作。如果该操作必须被51Testing软件测试网'Ypa6j7f!E6Vm
'' 取消,则退出该循环,然后使用该数51Testing软件测试网 h$F,j pM0GA
'' 组来取消这些更改。51Testing软件测试网
UC"h#Rg._g*q0P
Next i51Testing软件测试网bC3b2u)T!Xzx
51Testing软件测试网5eS,b{9]
通过在程序中添加到 SelBookmarks 集合来选择记录51Testing软件测试网
D"vh%^U2pFh
\k
通过将记录添加到这个集合,也可以在程序中选定记录。例如,可能有一个显示指定的客户所有订货的网格。如果要高亮显示该客户花费超过 $100的所有记录,则对记录进行过滤,并将结果书签添加到 SelBookmarks 集合。51Testing软件测试网
zWTF$_)J2q._
Dim rs As Recordset51Testing软件测试网VS:L
r-r$C@
Set rs = Adodc1.Recordset
9L6lH k:~w:K3Q051Testing软件测试网3X9D\T;xUrx"o4P`
While Not rs.EOF
mO ?*x+W~E s0 If rs!SupplierID = 12 Then
,C\ I-|$|hj}0 DataGrid1.SelBookmarks.Add rs.Bookmark
h Z;~:}oPk]0 End If51Testing软件测试网u*{7s*m0B
J
N
rs.MoveNext
B9\ w gXN4s0 Wend51Testing软件测试网/o!N*C |osPsQ5}8d%`I
51Testing软件测试网%r-r-hWH
显示计算结果字段51Testing软件测试网s eM-K3NEx1l
假设在表中有一个名为 "Price" 的字段,并且想使用本地税率来计算表中每一项的税费。这就是一个计算结果字段,可以通过修改 DataSource 的查询来计算这个值,并把这个值返回给 DataGrid 控件。
cJ$b*ZY0 要在 DataGrid 控件中创建一个计算结果字段
#FX;N,l{_5A0 1. 确认在机器上已为 Northwind 数据库建立了一个OLE DB 数据源;如果还没有创建这样的一个数据源,请按照“创建 Northwind 的OLE DBData 连接”的步骤操作。
KS5|
[9i;p3_U?
bx0 2. 在窗体上放置一个 ADO Data 控件和一个 DataGrid 控件。
/}!o#^ncc*d0 3. 将 ADO Data 控件的ConnectionString 属性设置为 Northwind 的数据源。
4F4p:{WTP0 4. 设置 ADO Data 控件的 RecordSource 属性。在“属性”窗口中,单击“记录源”并输入 Select ProductName, UnitPrice,(UnitPrice * .082) As Tax From Products。
z
E!^%{+j};]0 5. 将 DataGrid 控件的 DataSource 属性设置为这个 ADO Data 控件。
LSG(vv ai0 6. 运行该工程。
M$nW%~;ei051Testing软件测试网D'm2ytx*b
与类模块一起使用 DataGrid 控件
+P5~r"_X&`*pj CE0 如果想要访问以自定义格式或以 ODBC 驱动程序不直接支持的格式存放的数据,可以创建一个类来封装该数据。然后可以编写该类的自定义函数来检索这些数据。这样该类就变成了一种数据源,可以被任何数据使用者(如DataGrid 控件)使用。
"\%eP3y hd+T#Q e0 在这个类模块的Initialize 事件中,首先通过声明一个作为 New ADODB.Recordset的变量,来创建一个 ADODB recordset 对象。在创建了这个 recordset 对象后,再添加字段,每个数据源中的每个字段都要加入。然后使用合适的数据填充这个记录集。51Testing软件测试网^R4D.bc.OAL&U
注意 也可以使用 OLEDB 示例提供者来创建一个数据源。关于 OLEDB示例提供者的详细信息,请参阅“创建带有数据提供方的部件”。
#`k'f.CYl$p$U3m0 类模块有一个 GetDataMember 事件,只要当数据使用者(诸如 DataGrid 控件)需要数据时就产生该事件。在这个事件中,Data 参数被设置为在Initialize 事件中所创建的 recordset 对象。
h&[4Fic
a0 如果要使用这个类模块,应创建一个具有一个 DataGrid 控件的窗体。在该窗体的 Load 事件的代码中,将该控件的 DataSource 属性设置为这个类。
t`(X%D0l$jt0 注意数据类模块在设计时是不可用的。例如,如果使用 DataGrid 控件,则当用户在“属性”窗口中单击“数据源”时,所有可用的数据源都会出现在一个下拉列表中。但其中不会有这个数据类模块,它只能在代码中设置。51Testing软件测试网#c'G1CC
Y"R.X"r4j
51Testing软件测试网-g/pW'vE/ywU
使用类模块创建一个数据源51Testing软件测试网y ~%p0T#D~e v&P%_
下面的示例使用一个类模块来创建一个简单数据源。然后通过 DataSource属性将 DataGrid 控件绑定到该模块。
K+I3Z9i(h-I+{^6`q0要创建一个用于DataGrid 的类
noQC*s
M'pw0 1. 创建一个新的标准 Exe 工程。51Testing软件测试网]M+BV @*m8e/K
2. 给窗体添加一个 DataGrid 控件。如果DataGrid控件不在“工具箱”中,则在“工程”菜单中单击“部件”,51Testing软件测试网?,Zf:xC-i6I/Fm
再单击“Microsoft DataGrid Control”,然后单击“确定”。
G8o!Z:I'H ix0 3. 在“工程”菜单中,单击“引用”。在“引用”对话框中,单击“MicrosoftActiveX Data Objects 2.0 Library”。51Testing软件测试网9Aq
aH/_Dq9X,N
4. 在“工程”菜单中,单击“添加类模块”来给工程添加一个数据类模块。
]#[|%nfH)Wn#R,u0 5. 在“工程资源管理器”窗口中,单击并选定“类”图标,并按 F4 键显示“属性”窗口。
A;@-b|4x7`
xt0 6. 在“属性”窗口中,将类的名称更改为NamesData。51Testing软件测试网4O#Z6O3t$N
7. 在“属性”窗口中,单击“DataSourcebehavīor”并将该属性更改为vbDataSource。51Testing软件测试网,zd0j&i1V+E7z
8. 在该类模块的 Declarations 部分,创建一个 ADODB Recordset变量,如下所示:51Testing软件测试网 Fo2a*CZ~cW
Option Explicit
8r,Ka"R Q8KW0 Private WithEvents rsNames As ADODB.RecordSet
iq.uCZ0 使用 WithEvents 关键词来声明该变量,使用户可以对 RecordSet 对象的事件编程。
/d)Ip m'iO$IU0 9. 在该类的 Initialize 事件中,添加下述代码:
IeJ}1uQ/r(u0 Private Sub Class_Initialize()51Testing软件测试网5^[(VR&b{:^*r^
'' 将新的数据成员的名称添加到 DataMember 集合51Testing软件测试网"{'RCw.tb
'' 这使其它对象可以看见这些可用的51Testing软件测试网;W.Hw[6iA
DataMembersDataMembers.Add "Names"51Testing软件测试网m^{
g!i5yoM3|
51Testing软件测试网!z2X$jtz"d!E.KL
Set rsNames = New ADODB.RecordSet '' 设置对象变量。51Testing软件测试网X$E?+E Pr
'' 创建一个具有两个字段的 recordset,并打开该 recordset。51Testing软件测试网C@\no1?
E!~
'' 第一个记录具有一个整数的数据类型,第二个记录是一个最大可51Testing软件测试网*~zE5r+j
'' 达 256 个字符的字符串。CursorType 被设置为 OpenStatic
hjzf}lO"f|*m0 '' —— 一个可更新的对一组记录的快照。LockType 被设置为51Testing软件测试网;T
own*I6qE E
'' LockOptimistic,以允许对该 recordset 进行更新。51Testing软件测试网$GM7j(YL{2l)ei:uz
With rsNames
1J0L&T ux0Vq4iK0 .Fields.Append "ID", adInteger
:JI'R(s:YvQ L6ON0 .Fields.Append "Name", adBSTR, 255
McaV1q*U-d0 .CursorType = adOpenStatic51Testing软件测试网nUD6}%Cd3\
.LockType = adLockOptimistic
RUX)EX(Pw0 .Open
1`P+w|yXA0 End With51Testing软件测试网?!}:N
Fc3IX(N
51Testing软件测试网R4|p;Y,v!z
Dim i As Integer51Testing软件测试网4R!jHrl
xU)o5DY
For i = 1 to 10 '' 添加十条记录。51Testing软件测试网WE"qa!I
rsNames.AddNew
S
tQc`$z/lvW
s0 rsNames!ID = i51Testing软件测试网2\2V/div;t c
N
rsNames!Name = "Name " & i
a;G hre!u0}z0 rsNames.Update
zA'{ Y)UoyjU0 Next i51Testing软件测试网"B(ep.v`
rsNames.MoveFirst '' 移到该记录集的开始。51Testing软件测试网V7[)B&|}"J
o
End Sub51Testing软件测试网
JA0H!LvP
这部分代码首先创建 recordset 对象,然后给该对象添加两个字段。代码接着给 recordset 添加十条记录。
i3`#b{;rM]0 10. 在该类的 GetDataMember 事件中,添加下述代码 :51Testing软件测试网6O;`#@
UR ~&WM
Private Sub Class_GetDataMember(ByVal DataMember As String, _
6d7tle&^W{%j0 Data As Object)
"f&V&L/?PJ&U'y1_0 Set Data = rsNames51Testing软件测试网dRZ4Fi
End Sub51Testing软件测试网(]']
q4] Q^1l
只要发生该事件——即当该类对象被绑定到一个数据使用者,如 DataGrid控件时,代码将返回该 recordset 对象。
y5D$J0Bx.UB'_0 11. 在 Form 对象的代码模块中,声明一个数据类的对象变量:
Xo6|DtN0 Option Explicit51Testing软件测试网-s"]*A'YQMk{(X
Private datNames As NamesData '' 类变量51Testing软件测试网%Z&b5s0YydP
12. 在 Form 对象的 Load 事件的代码中,将 DataGrid 控件的 DataSource设置为该类对象。
?R;U$yL+E'~0 Private Sub Form_Load()
V aW(CI3\6o$i0 '' 创建一个新的 NamesData 对象51Testing软件测试网)PP)a?O3B.uS-XF
Set datNames = New NamesData51Testing软件测试网0H"Lo5b2Qxf|$Js
'' 将这个 DataGrid 绑定到新的数据源 datNames51Testing软件测试网.dv%{~M&?j
J'v]
Set DataGrid1.DataSource = datNames
Y;l7h][c*m0 End Sub51Testing软件测试网&xNIe2H`k*m
13. 按 F5 键运行该工程。
9?-bp"{H#H;@0X051Testing软件测试网]/d+C0E,cqT
相关阅读:
- VB表格控件总览与例程分析[转载] (紫忧, 2007-3-06)
- DataGrid控件的使用 (紫忧, 2007-3-06)
- DataGrid控件的使用二 (紫忧, 2007-3-06)
- DataGrid控件的使用三 (紫忧, 2007-3-06)
TAG: vb
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 34073
- 日志数: 65
- 图片数: 4
- 建立时间: 2006-12-06
- 更新时间: 2008-09-10