转贴
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过的记录集,显示的仍然是全部的行。

解决方案 »

  1.   

    MSHFlexGrid控件Public Function ShowData(Resultset As Recordset) As Variant
       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
      

  2.   

    我有一个MSHFlexGrid控件及ACCESS和ADO的使用的完整代码,如果要的话来信!
      

  3.   

    可以将数据库的记录转化成字符串,然后用clip属性.即可!
      

  4.   

    对于一个数据集合(recordset)rs
    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的形式
    .....
    等等
    还有什么需要的?