Page 1 of 1

Filter

Posted: 23 Dec 2007, 01:01
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

Re: Filter

Posted: 23 Dec 2007, 14:02
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. :)

Filter

Posted: 23 Dec 2007, 16:02
by alphi
Thanx,
works wonderfull.

regards and again merri christmas and a happy new year