转贴
Option ExplicitPrivate Sub Command1_Click()
'下面的代码找到以提供的关键字开头的行!注意,是开头!
With VSFlexGrid1
Dim myRow1 As Long
Dim myRow0 As Long
Do
myRow1 = .FindRow("张", myRow0 + 1, 1, False, False)
Dim i As Long
For i = myRow0 + 1 To myRow1 - 1
.RowHidden(i) = True
Next i
myRow0 = myRow1
Loop While (myRow1 >= .FixedRows) And (myRow1 < .Rows - 1) ' 依次遍历其他行,注意FindRow之中的起始行,应该是上次找到的行号加一。
End With
End SubPrivate Sub Command2_Click()
'下面的代码找到包含提供的关键字的行。不管是开头、中部还是结尾
With VSFlexGrid1
Dim myRow As Long
Dim i As Integer
For i = .FixedRows To .Rows - 1
If Not (.TextMatrix(i, 1) Like "*德*") Then
.RowHidden(i) = True
End If
Next i '依次遍历其他行
End With
End SubPrivate Sub Form_Load()
With VSFlexGrid1
.Rows = .FixedRows
.AddItem "1" & vbTab & "刘德华" & vbTab & "200201" & vbTab & "andy"
.AddItem "2" & vbTab & "张学友" & vbTab & "200202" & vbTab & "jacky"
.AddItem "3" & vbTab & "冯德伦" & vbTab & "200203" & vbTab & "fen"
.AddItem "4" & vbTab & "张宇" & vbTab & "200204" & vbTab & "zy"
End With
End Sub测试方法:建立新标准exe工程,在窗体放上一个VsFlexGrid1和Command1、Commnand2按钮。
声明:原先对FindRow好久不用了,所以记忆错误。该方法仅仅对寻找以给定字符串开头的行适用。
如果表格行数不多,遍历还是可行的。例如1000行以下,没有慢的感觉。而且适用于非绑定情况下的表格。
如果表格绑定到ADO记录集,可以用rst.Filter="姓名 Like '*德*'"语句,对记录集进行筛选,然后再set VsFlexGrid1.datasource=rst即可。注意该方法只对于绑定情况有效。而且,某些控件不支持Filter过的记录集,显示的仍然是全部的行。
Option ExplicitPrivate Sub Command1_Click()
'下面的代码找到以提供的关键字开头的行!注意,是开头!
With VSFlexGrid1
Dim myRow1 As Long
Dim myRow0 As Long
Do
myRow1 = .FindRow("张", myRow0 + 1, 1, False, False)
Dim i As Long
For i = myRow0 + 1 To myRow1 - 1
.RowHidden(i) = True
Next i
myRow0 = myRow1
Loop While (myRow1 >= .FixedRows) And (myRow1 < .Rows - 1) ' 依次遍历其他行,注意FindRow之中的起始行,应该是上次找到的行号加一。
End With
End SubPrivate Sub Command2_Click()
'下面的代码找到包含提供的关键字的行。不管是开头、中部还是结尾
With VSFlexGrid1
Dim myRow As Long
Dim i As Integer
For i = .FixedRows To .Rows - 1
If Not (.TextMatrix(i, 1) Like "*德*") Then
.RowHidden(i) = True
End If
Next i '依次遍历其他行
End With
End SubPrivate Sub Form_Load()
With VSFlexGrid1
.Rows = .FixedRows
.AddItem "1" & vbTab & "刘德华" & vbTab & "200201" & vbTab & "andy"
.AddItem "2" & vbTab & "张学友" & vbTab & "200202" & vbTab & "jacky"
.AddItem "3" & vbTab & "冯德伦" & vbTab & "200203" & vbTab & "fen"
.AddItem "4" & vbTab & "张宇" & vbTab & "200204" & vbTab & "zy"
End With
End Sub测试方法:建立新标准exe工程,在窗体放上一个VsFlexGrid1和Command1、Commnand2按钮。
声明:原先对FindRow好久不用了,所以记忆错误。该方法仅仅对寻找以给定字符串开头的行适用。
如果表格行数不多,遍历还是可行的。例如1000行以下,没有慢的感觉。而且适用于非绑定情况下的表格。
如果表格绑定到ADO记录集,可以用rst.Filter="姓名 Like '*德*'"语句,对记录集进行筛选,然后再set VsFlexGrid1.datasource=rst即可。注意该方法只对于绑定情况有效。而且,某些控件不支持Filter过的记录集,显示的仍然是全部的行。
Dim cl As Field
Static GridSetup As Boolean
Dim MaxL As Integer
Dim Op As Integer
Dim rsl As Recordset
Dim rows As Variant
On Error GoTo ShowDataEH
Set rsl = Resultset If GridSetup = False Then
FGrid1.rows = 51
FGrid1.Cols = rsl.Fields.Count
FGrid1.Row = 0
Op = 0
For Each cl In rsl.Fields
FGrid1.Col = Op
FGrid1 = cl.Name
If rsl.Fields(Op).DefinedSize > 255 Then
MaxL = 1
Else
MaxL = rsl.Fields(Op).ActualSize + 4
End If
If MaxL > 20 Then MaxL = 20
FGrid1.ColWidth(FGrid1.Col) = TextWidth(String(MaxL, "n"))
Op = Op + 1
Next cl
GridSetup = True
End If
FGrid1.rows = 1
FGrid1.rows = 51
FGrid1.Row = 1
FGrid1.Col = 0
FGrid1.RowSel = FGrid1.rows - 1
FGrid1.ColSel = FGrid1.Cols - 1
With FGrid1
' You can also use the ADO2 GetString method here in lieu of the
' following.
FGrid1.Clip = rsl.GetString(adClipString, 50, , , "-")
End With
ExitShowData:
FGrid1.RowSel = 1
FGrid1.ColSel = 0
Exit FunctionShowDataEH:
Select Case Err
Case 3021:
FGrid1.Clear
Resume ExitShowData
Case 13, Is < 0
rows(j, i) = "< >"
Resume 'Next
Case Else
MsgBox "Could not display data: " & Err & vbCrLf & Error$
Resume ' ExitShowData
End Select
End Function
vsflexgrid(假设该控件名叫VG)有一个datasource的属性,
set VG.datasource = rs
VG上就自然能看到rs上的数据,
你把vg.datamode设成1-flexDMBound 或者2-flexDMBoundBatch,
vg与rs的数据就同步起来
增加时既可以用vg.additem,也可以用rs.addnew
修改时直接修改VG即可,前提是vg.editable=true
删除时既可以用vg.removeitem,也可以用rs.delete
保存时用rs.updatebatch就行了
这些都是我常用的方法
修改也可以用程序控制,如vg.textmatrix(row,col)=....
控制显示方式的话有
vg.colformat(col)(每列显示格式)
vg.colcombolist(col)(每列的选择菜单)
只要把数据类型定义成布尔型,自动会显示成checkbox的形式
.....
等等
还有什么需要的?