Filter

The place for threads about TimoSoft ExplorerListView.
Post Reply
alphi
Lieutenant
Posts: 12
Joined: 29 Aug 2006, 20:39

Filter

Post by alphi »

Hi Timmo,
do you have a simple sample how to use the
filter-properties and the filter bar?

regards
alphi

PS: wish you a merry christmas
User avatar
TiKu
Administrator
Administrator
Posts: 832
Joined: 28 Sep 2004, 21:10
Location: München
Contact:

Re: Filter

Post by TiKu »

One possible implementation:

Code: Select all

  Private Type ANIMALLISTITEM
    strName As String
    strClass As String
    bVisibleByName As Boolean
    bVisibleByClass As Boolean
    lItemID As Long
  End Type


  Private animals() As ANIMALLISTITEM

Private Sub Form_Load()
  Dim i As Long

  ReDim animals(0 To 9) As ANIMALLISTITEM
  animals(0).strName = "Ape"
  animals(0).strClass = "Mammalia"
  animals(1).strName = "Cetacea"
  animals(1).strClass = "Mammalia"
  animals(2).strName = "Eagle"
  animals(2).strClass = "Aves"
  animals(3).strName = "Electric eel"
  animals(3).strClass = "Actinopterygii"
  animals(4).strName = "Emperor scorpion"
  animals(4).strClass = "Arachnida"
  animals(5).strName = "Fly"
  animals(5).strClass = "Insecta"
  animals(6).strName = "Hummingbird"
  animals(6).strClass = "Aves"
  animals(7).strName = "King Cobra"
  animals(7).strClass = "Reptilia"
  animals(8).strName = "Mosquito"
  animals(8).strClass = "Insecta"
  animals(9).strName = "Odonata"
  animals(9).strClass = "Insecta"

  With lv.Columns
    .Add "Animal"
    .Add "Class"
  End With
  With lv.ListItems
    For i = 0 To 9
      animals(i).bVisibleByClass = True
      animals(i).bVisibleByName = True
      With .Add(animals(i).strName)
        animals(i).lItemID = .ID
        .SubItems(1).Text = animals(i).strClass
      End With
    Next i
  End With
End Sub

Private Sub lv_FilterChanged(ByVal column As ExLVwLibUCtl.IListViewColumn)
  Dim currentVisibility As Boolean
  Dim filter As String
  Dim i As Long
  Dim newVisibility As Boolean

  filter = LCase$(column.filter)
  If column.Index = 0 Then
    ' filter by name
    With lv.ListItems
      For i = 0 To 9
        currentVisibility = animals(i).bVisibleByName And animals(i).bVisibleByClass
        If filter = "" Then
          animals(i).bVisibleByName = True
        Else
          animals(i).bVisibleByName = (Left$(LCase$(animals(i).strName), Len(filter)) = filter)
        End If
        newVisibility = animals(i).bVisibleByName And animals(i).bVisibleByClass

        If newVisibility <> currentVisibility Then
          If newVisibility Then
            ' add the item
            With .Add(animals(i).strName)
              animals(i).lItemID = .ID
              .SubItems(1).Text = animals(i).strClass
            End With
          Else
            ' remove it
            lv.ListItems.Remove animals(i).lItemID, ItemIdentifierTypeConstants.iitID
          End If
        End If
      Next i
    End With
  Else
    ' filter by class
    With lv.ListItems
      For i = 0 To 9
        currentVisibility = animals(i).bVisibleByName And animals(i).bVisibleByClass
        If filter = "" Then
          animals(i).bVisibleByClass = True
        Else
          animals(i).bVisibleByClass = (Left$(LCase$(animals(i).strClass), Len(filter)) = filter)
        End If
        newVisibility = animals(i).bVisibleByName And animals(i).bVisibleByClass

        If newVisibility <> currentVisibility Then
          If newVisibility Then
            ' add the item
            With .Add(animals(i).strName)
              animals(i).lItemID = .ID
              .SubItems(1).Text = animals(i).strClass
            End With
          Else
            ' remove it
            lv.ListItems.Remove animals(i).lItemID, ItemIdentifierTypeConstants.iitID
          End If
        End If
      Next i
    End With
  End If
End Sub
alphi wrote:PS: wish you a merry christmas
Thanks, same to you. :)
Crunching for Fab36_Folding-Division at Folding@Home. Join Fab36/Fab30! - Folding@Home and BOINC
Boycott DRM! Boycott HDCP!
alphi
Lieutenant
Posts: 12
Joined: 29 Aug 2006, 20:39

Filter

Post by alphi »

Thanx,
works wonderfull.

regards and again merri christmas and a happy new year
Post Reply