首页 > 解决方案 > 如何使用搜索按钮和文本框将结果显示到列表视图

问题描述

我正在编写一个搜索按钮来列表视图并仅显示结果数据

Private Sub Command3_Click()
    Dim itmx As ListItem
    Set itmx = Listview1.FindItem(Text3.Text, lvwText, , lvwPartial)

    If itmx Is Nothing Then
        MsgBox "record not found", vbCritical
    Else
        Listview1.ListItems(itmx.Index).Selected = True
        Listview1.SetFocus
    End If

End Sub

我希望结果将仅显示我在文本框中搜索的数据,上面的代码仅突出显示列表视图中的行。

标签: vb6

解决方案


此代码将在您的 ListView 中选择与您的搜索条件匹配的多个项目,并删除那些不匹配的项目:

Private Sub Command3_Click()
    Dim itmx As ListItem
    Dim iIndex As Integer
    Dim iRecordsFound As Integer
    Dim fMultiSelect As Boolean

    ' Store state of ListView's MultiSelect property and set it to True
    fMultiSelect = ListView1.MultiSelect
    ListView1.MultiSelect = True

    ' Deselect any selected items
    For iIndex = 1 To ListView1.ListItems.Count
        ListView1.ListItems.Item(iIndex).Selected = False
    Next

    ' Initialize variables
    iIndex = 1
    iRecordsFound = 0

    Do While iIndex > 0 And iIndex <= ListView1.ListItems.Count

        Set itmx = ListView1.FindItem(Text3.Text, lvwText, iIndex, lvwPartial)

        If itmx Is Nothing Then
            iIndex = 0
        Else
            itmx.Selected = True
            iIndex = itmx.Index + 1
            iRecordsFound = iRecordsFound + 1
        End If

    Loop

    ' Delete unselected items
    For iIndex = ListView1.ListItems.Count To 1 Step -1
        If Not ListView1.ListItems.Item(iIndex).Selected Then
            ListView1.ListItems.Remove iIndex
        End If
    Next

    If iRecordsFound = 0 Then
        MsgBox "No records found", vbCritical
    Else
        MsgBox iRecordsFound & " records found", vbInformation
    End If

    ' Restore state of ListView's MultiSelect property
    ListView1.MultiSelect = fMultiSelect

    ListView1.SetFocus

End Sub

推荐阅读