DataGrid控件的使用三

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

S7fkm7|:i0    使用列
H#A^9Y*~}R'Z0    通过更改 DataSource 属性,可以动态地更改在 DataGrid 控件中显示的数据。例如,可以显示同一个数据库的不同表。如果这样做,则 DataGrid 控件将只根据默认的属性显示数据。51Testing软件测试网4q ^{Cb6K

Wb/U|$Qj0\.Q7w0    添加、删除或隐藏列51Testing软件测试网u` _u U5D4R
    通过使用 Columns 集合和 Column 对象的属性和方法,可以在程序中添加、删除或隐藏列。51Testing软件测试网E&Mh%_ _HH
51Testing软件测试网#E+| P;[-I
    添加和删除一列51Testing软件测试网#Oir6z#R[ y`;\
    要在运行时添加一列,可以使用 Add 方法。如果首先声明一个变量,并将新对象赋给该变量,就可以用简明的代码设置各种属性。51Testing软件测试网~v:A i`L|[
    Private Sub AddColumn()
Y:}4n4[-]._L0      '' 在最右边的位置添加一列。然后设置其 Visible、Width、51Testing软件测试网G'\+N*~1ygl
      '' Caption以及 Alignment 属性。DataField 属性则指定51Testing软件测试网'x\+u#w0xM-E
      '' 该列将绑定到哪一个字段。51Testing软件测试网Q%X.ikr(s a8F
      Dim c As Column51Testing软件测试网8{H)L.T ?1T|
      Set c = DataGrid1.Columns.Add(DataGrid1.Columns.Count)
}0Mn-Q l%L,w#} Zg0      With c51Testing软件测试网,z+J\?;]-I8|
       .Visible = True51Testing软件测试网&Yc(PT1mg V N}
       .Width = 1000
!c ^ C;S~+Yzs_-k_1U0       .Caption = "我的新列"
6JC ? ? Y1bU2[3M.C,M0       .DataField = Adodc1.Recordset.Fields("ProductName").Name51Testing软件测试网sq4k!]ozeC_3x g
       .Alignment = dbgRight
hXLDl0      End With51Testing软件测试网y bboE+LH A
    End Sub
DM!J d'{w\%~0    可以使用方法来删除任意一列。请确保使用 ColIndex 参数来指定要删除的列。下面的代码将删除被单击的列。
x6L!_}bPi0    Private Sub DataGrid1_HeadClick(ByVal ColIndex As Integer)
Z8Z@ sJP5q0       DataGrid1.Columns.Remove ColIndex51Testing软件测试网 gn/[ lD/tK'?8`c
    End Sub51Testing软件测试网hTF$UiO vS
51Testing软件测试网gE1VJ*W F5c"oV8Uf%]
    隐藏一列
L _'t6|.i"jLRPk0    通过将 Visible 属性设置为 False,可以隐藏任意一列。当想要限制用户可以查看或编辑的列时这一功能特别有用。下面的示例在 Columns 集合中循环,隐藏除少数列之外的所有列。51Testing软件测试网 ACrn(UV+D/^r
    Private Sub HideColumns()51Testing软件测试网)xT2X V8\H{4K
      '' 使用 DataField 属性来判别正在测试的是哪一列。51Testing软件测试网H Cl |0J
      '' 只显示三列:ProductName、UnitPrice以及
i m1O:p7_Atl0      '' UnitsInStock。
dTsHw7\0      Dim c As Column51Testing软件测试网"i$s6@ P"Vcd8S&q
      For Each c In DataGrid1.Columns
R?+m t%_e0         Select Case c.DataField
uQEM,~k0         Case "ProductName"51Testing软件测试网 HT4t,SD9Zp][_$w
           c.Visible = True51Testing软件测试网 Cr&H$K/K.Tax6v
         Case "UnitPrice"
F4oJ KL4n?L0N0           c.Visible = True
%M!`,r`/e${u}0         Case "UnitsInStock"
t!u,KHw&xF`I0           c.Visible = True
`v(LQ0sNEg0           c.Caption = "In Stock"    '' 更改这个列的标头。51Testing软件测试网K,j)} ub4} L@H
         Case Else             '' 隐藏其它所有的列。51Testing软件测试网j/^.\~k%w?7h
           c.Visible = False51Testing软件测试网kpNG+Bunbz
         End Select51Testing软件测试网1NS [qBF
      Next c
6\ F-hP3nDd1P0    End Sub
"N{ @Q ^y0
QBk z ql_0    操作 DataGrid 视图51Testing软件测试网$M_7SISd-Ht z
    一个“拆分”的网格使最终用户对相同的数据可以拥有多个视图。例如,假设有一个由十个字段组成的大表。在这种情况下,在控件中察看的记录集将有十列宽,除非窗体非常宽,否则用户将无法同时看见所有列的内容。,而且,假设用户只对第一列和最后一列感兴趣(例如,第一列是名字,最后一列是电话号码)。为了能同时看到在两端的列(不重新安排列的顺序),可以对网格进行拆分。51Testing软件测试网+bVP2m!ki#K E4mEl

a |N7bj0    创建一个 Split 对象
'Ex-aBhj\0    在设计时,可以创建一个拆分,具体步骤是:右键单击网格,单击“编辑”,再单击右键,然后单击“拆分”。通过右键单击该控件,并单击“属性”来显示“属性页”对话框,可以编辑这个拆分。可以使用“拆分”选项卡来自定义拆分。要删除一个拆分,右键单击该拆分,并单击“删除”。
-o4x d&G$m@|)_.~$hI0    在运行时,最终用户也可以通过单击位于这个网格控件的左下边的右边的选项卡,以手工方式来拆分该网格(除非不允许这个操作),如下图所示:
eQ w6j.jR E}!]s0
-{C c+j1A5Gtm&IK0默认情况下,DataGrid 控件包含一个 Split 对象。防止最终用户添加拆分的代码为:
Ny#Z~NT3S0    DataGrid1.Splits(0).AllowSizing = False51Testing软件测试网.UH+j:`b c0?
51Testing软件测试网?N \6K1J
    在程序中添加和删除拆分
7@fy(@AYoH*d4g0    DataGrid 控件包含一个 Split 对象的集合。要在程序中添加拆分,可以使用 Add 方法,如下所示:
6^nHP#Ae A0    DataGrid1.Splits.Add 1
xf_m n,Mok0    注意 Add 方法需要新的拆分索引作为其参数。要添加一个拆分,应将这个索引参数设置为 Splits 集合的 Count 属性值。
2^H \7S2a,C o-}PK0    使用 Split 集合的 Add 方法,可以在程序中按照实际需要添加拆分。由于添加多于两个以上的拆分将使网格很难使用,可以使用该集合的 Count 属性来限制拆分的数目。51Testing软件测试网7JC nzYo{
    If DataGrid1.Splits.Count < 3 Then '' 添加一个拆分。51Testing软件测试网5?O&z tLi&M
       DataGrid1.Splits.Add DataGrid1.Splits.Count
#Wvib o}}}0    End If
2kE0w(W3I0
2bhLe T2p%]'w0    使拆分同步51Testing软件测试网6rK8J'\:gkH/T!V+Hx-_
    当拆分多于一个时,可能希望控制这些拆分如何滚动。例如,在一个具有三个拆分的网格中,可以决定只让第一个和第三个拆分同步,而让中间的拆分独立地滚动。要同步任何两个(或多个)拆分,只需将每个 Split 对象的 ScrollGroup 属性设置为同一个值。51Testing软件测试网+N'gG?i/L(}z1[2^KY
    '' 使第一个和第三个 Split 对象同步。
,\.F+P)Fg0    With DataGrid151Testing软件测试网;L3h ^}ww
      .Splits(0)
?u7nW,I!EB0    .ScrollGroup = 151Testing软件测试网3z)J/@d \ q
    .Splits(1).ScrollGroup = 2
(j)`;~"Y6NOh0    .Splits(2).ScrollGroup = 151Testing软件测试网 _pZe7PzE6D;{
    End With
^ eK J {v0T&d0    通过设置 Scrollbars 属性,使同步的拆分组只显示一个滚卷条,从而进一步自定义拆分的外观。51Testing软件测试网9^}3P5b`0{{kA

dR Q'K9^3X0    控制 Tab 键和箭头键的行为51Testing软件测试网 @}$cb3f._
    使用 WrapCellPointer、TabAcrossSplits以及 TabAction 属性,可以决定当最终用户按下 tab 键或箭头键时网格的行为。51Testing软件测试网m-o5JT fCu`
    在这三个属性中,TabAction 属性级别最高,它决定 WrapCellPointer 和TabAcrossSplits 这两个属性是否能生效。TabAction 有三个设置值: ControlNavigation、Column Navigation 和 Grid Navigation。当该属性设置为 ControlNavigation 时,按 Tab 键根据 TabIndex 将焦点切换到下一个控件。这一设置优先于 WrapCellPointer 和 TabAcrossSplits。
\je*`$b#I0    WrapCellPointer 属性决定在任何单个的拆分中 tab 键和箭头键的行为。如果该属性设置为 True,且当前单元位于最后一列,这时最终用户按 tab 键则使第一列的下一行变成当前的单元。不过,如果当前单元位于最后一行的最后一列时,这时就没有地方可以“换行”。51Testing软件测试网 f#x"Fm4X z$NF
    TabAcrossSplits 属性决定当网格中存在两个或多个拆分时 tab 和箭头键的行为。如果该属性设置为 True,且当前单元位于任何一个拆分的最后一列,则按Tab或箭头键将使当前单元“跳” 到下一个拆分的第一列。当前单元仍保持相同的行位置。51Testing软件测试网2b.kK,xUM~x
    注意 如果 WrapCellPointer 和 TabAcrossSplits 属性都设置为 True,则只有当前单元位于最后一个拆分的最后一列时才会换行。这时当前单元将换到第一个拆分的第一列中的下一行。
d4o6KYY0
%s%GD:W.v2hg8o0    自定义列集合
P^!p/Y f4X0    每一个 Split 对象都有一个 Columns 属性,允许用户来操作一个 Column对象的集合。通过这样做,可以更改每个 Split 对象的外观。例如,可以用一个拆分包含显示姓氏字段和名字字段的两个列,而第二个拆分则显示电话字段和地址字段。要实现这一目标,需要将其它的每一列的 Visible 属性设置为 False,如下所示:
S+|)n-h L-M n6M0    '' 枚举 Columns 集合,对每一个 Column 对象的 DataField 属性51Testing软件测试网iV X(O Ho a,h'ax { w
    '' 进行测试。如果测试失败,则隐藏这一列。51Testing软件测试网'itz3H/D
    Dim i As Integer51Testing软件测试网,]3k&L k,e
51Testing软件测试网 f]7I;n/zL
    '' 隐藏除 ProductName 列之外的所有列。51Testing软件测试网6?q[ Y7aq/V%o!l
    For i = 0 To DataGrid1.Splits(0).Columns.Count - 1
xEA}b0m,z/D0      If DataGrid1.Splits(0).Columns(i).DataField <> "ProductName" Then51Testing软件测试网0{/oP0b9K
         DataGrid1.Splits(0).Columns(i).Visible = False51Testing软件测试网)N&i:kJ%eJ[
      End If
/D3?)YQ9M,s0    Next i51Testing软件测试网 MT(r8PZZL

2vC+}7]%W!j!E0    '' 隐藏除 UnitPrice 列之外的所有列。51Testing软件测试网;L3xg;?D
    For i = 0 To DataGrid1.Splits(0).Columns.Count - 151Testing软件测试网OyP!p hrJ1{]N AK
      If DataGrid1.Splits(1).Columns(i).DataField <> "UnitPrice" Then
gw lr,~P9y Rr0         DataGrid1.Splits(1).Columns(i).Visible = False51Testing软件测试网2_8A2PV1Q/_jc(@
      End If51Testing软件测试网Wx g1M QD7o8U
    Next I
-v3t0nC~G? dWjX051Testing软件测试网eu)s O v_


TAG: vb

 

评分:0

我来说两句

Open Toolbar