DataGrid控件的使用四

上一篇 / 下一篇  2007-03-06 11:36:07 / 个人分类:vb

4X+uiA!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[nm r0    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!E6V m
      '' 取消,则退出该循环,然后使用该数51Testing软件测试网h$F,j pM0G A
      '' 组来取消这些更改。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
hZ;~:}oPk]0      End If51Testing软件测试网u*{7s*m0B J N
      rs.MoveNext
B9\ w gXN4s0    Wend51Testing软件测试网/o!N*C | osPsQ5}8d%`I
51Testing软件测试网%r-r-h WH
    显示计算结果字段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#^nc c*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(vvai0    6. 运行该工程。
M$nW%~;e i051Testing软件测试网 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+B V@*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 事件中,添加下述代码:
I eJ }1u Q/r(u0    Private Sub Class_Initialize()51Testing软件测试网5^ [(VR&b{:^*r^
      '' 将新的数据成员的名称添加到 DataMember 集合51Testing软件测试网"{'RC w.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?+EPr
      '' 创建一个具有两个字段的 recordset,并打开该 recordset。51Testing软件测试网C@\no1? E!~
      '' 第一个记录具有一个整数的数据类型,第二个记录是一个最大可51Testing软件测试网*~zE5r+j
      '' 达 256 个字符的字符串。CursorType 被设置为 OpenStatic
hjzf} lO"f|*m0      '' —— 一个可更新的对一组记录的快照。LockType 被设置为51Testing软件测试网;T own*I6qEE
      '' LockOptimistic,以允许对该 recordset 进行更新。51Testing软件测试网$GM7j(YL{2l)ei:uz
      With rsNames
1J0L&T ux0Vq4iK0        .Fields.Append "ID", adInteger
:JI'R(s:Y vQ 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;Ghre!u0}z0        rsNames.Update
zA'{ Y)UoyjU0      Next i51Testing软件测试网"B(ep.v`
      rsNames.MoveFirst '' 移到该记录集的开始。51Testing软件测试网V7[)B&|}"J o
    End Sub51Testing软件测试网 JA0H!L vP
    这部分代码首先创建 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/? P J&U'y1_0       Set Data = rsNames51Testing软件测试网dRZ4Fi
    End Sub51Testing软件测试网(]'] q4] Q^1l
    只要发生该事件——即当该类对象被绑定到一个数据使用者,如 DataGrid控件时,代码将返回该 recordset 对象。
y5D$J0B x.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()
VaW(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


TAG: vb

 

评分:0

我来说两句

Open Toolbar