Results 1 to 5 of 5

Thread: do you know how?

  1. #1

    Thread Starter
    Frenzied Member sebs's Avatar
    Join Date
    Sep 2000
    Location
    Aylmer,Qc
    Posts
    1,606

    Unhappy

    i would like to know how to sort a listview
    by the size or number.

    cuz now what it does it sort my listview but in a alphabetical order,i have a column(size) and when i want to sort it, it does something like that:
    12
    1234
    2
    234
    what i want is
    2
    12
    234
    1234
    thanx

  2. #2
    _______ HeSaidJoe's Avatar
    Join Date
    Jun 1999
    Location
    Canada
    Posts
    3,946

    <?>

    Aaron gave me this some time ago works well.
    Code:
    'CREATE SORTING OF LISTVIEW BY ALPHA, NUMBER, DATE
    '
    'PUT THIS IN GEN DECLARATIONS OF FORM
    '*****************************************************************
    '
    Private Declare Function LockWindowUpdate Lib "user32" _
            (ByVal hWndLock As Long) As Long
    '
    Private Function InvNumber(ByVal Number As String) As String
        'This function is to deal with the negative numbers, so then they can be sorted alphabetically
    '
        Static i As Integer
        For i = 1 To Len(Number)
            Select Case Mid$(Number, i, 1)
            Case "-": Mid$(Number, i, 1) = " "
            Case "0": Mid$(Number, i, 1) = "9"
            Case "1": Mid$(Number, i, 1) = "8"
            Case "2": Mid$(Number, i, 1) = "7"
            Case "3": Mid$(Number, i, 1) = "6"
            Case "4": Mid$(Number, i, 1) = "5"
            Case "5": Mid$(Number, i, 1) = "4"
            Case "6": Mid$(Number, i, 1) = "3"
            Case "7": Mid$(Number, i, 1) = "2"
            Case "8": Mid$(Number, i, 1) = "1"
            Case "9": Mid$(Number, i, 1) = "0"
            End Select
        Next
        InvNumber = Number
    End Function
    '
    'LOAD THE LISTVIEW WITH RANDOM INFORMATION
    'PUT THIS IN LOAD OR CLICK
    '*********************************************************
    '
    Dim l As Long
        Dim dblRnd As Double
        Dim dteRnd As Date
        With ListView1
            ' Add three columns to the list - one for each data type.
            ' Note that the data type is set in the column header's
            ' tag in each case
    '
            .ColumnHeaders.Add(, , "String").Tag = "STRING"
            .ColumnHeaders.Add(, , "Number").Tag = "NUMBER"
            .ColumnHeaders.Add(, , "Date").Tag = "DATE"
    '
            ' Set the column alignment - has no bearing on the sorts.
    '
            .ColumnHeaders(1).Alignment = lvwColumnLeft
            .ColumnHeaders(2).Alignment = lvwColumnRight
            .ColumnHeaders(3).Alignment = lvwColumnCenter
    '
    ' Set BorderStyle property.
       ListView1.BorderStyle = ccFixedSingle
    '
    ' Set View property to Report.
       ListView1.View = lvwReport
    '
            ' Populate the list with data
            With .ListItems
                For l = 1 To 100
                    With .Add(, , "ListItem " & Format(l, "0000"))
                        dblRnd = (Rnd() * 10000) - 5000
                        dteRnd = (Rnd() * 1000) + Date
                        .ListSubItems.Add , , Format(dblRnd, "0.00")
                        .ListSubItems.Add , , Format(dteRnd, _
                        "dd/mm/yyyy")
                    End With
                Next l
            End With
        End With
    '
    'PUT THIS IN THE COLUMNCLICK EVENT OF LISTVIEW
    '***********************************************
        Dim lngStart As Long
        Dim lngCursor As Long
        Dim l As Long
        Dim strFormat As String
        Dim strData() As String
        Dim lngIndex As Long
        On Error Resume Next
        
        With ListView1
            ' Display the hourglass cursor while list is sorting
            lngCursor = .MousePointer
            .MousePointer = vbHourglass
            
            ' Prevent the ListView control from updating on screen
            ' and also to speed up the sort
            LockWindowUpdate .hWnd
            
            ' Check the data type of the column being sorted,
            lngIndex = ColumnHeader.Index - 1
        
            Select Case UCase$(ColumnHeader.Tag)
                Case "DATE"
                    ' Sort by date.
                    strFormat = "YYYYMMDDHhNnSs"
                    ' Loop through the values in this column. Re-format
                    ' the dates so as they can be sorted alphabetically,
                    With .ListItems
                        If (lngIndex > 0) Then
                            For l = 1 To .Count
                                With .Item(l).ListSubItems(lngIndex)
                                    .Tag = .Text & Chr$(0) & .Tag
                                    If IsDate(.Text) Then
                                        .Text = Format(CDate(.Text), _
                                        strFormat)
                                    Else
                                        .Text = ""
                                    End If
                                End With
                            Next l
                        Else
                            For l = 1 To .Count
                                With .Item(l)
                                    .Tag = .Text & Chr$(0) & .Tag
                                    If IsDate(.Text) Then
                                        .Text = Format(CDate(.Text), _
                                        strFormat)
                                    Else
                                        .Text = ""
                                    End If
                                End With
                            Next l
                        End If
                    End With
                    ' Sort the list alphabetically by this column
                    .SortOrder = (.SortOrder + 1) Mod 2
                    .SortKey = ColumnHeader.Index - 1
                    .Sorted = True
                    
                    ' Restore the previous values to the 'cells' in this
                    ' column of the list from the tags, and also restore
                    ' the tags to their original values
                    With .ListItems
                        If (lngIndex > 0) Then
                            For l = 1 To .Count
                                With .Item(l).ListSubItems(lngIndex)
                                    strData = Split(.Tag, Chr$(0))
                                    .Text = strData(0)
                                    .Tag = strData(1)
                                End With
                            Next l
                        Else
                            For l = 1 To .Count
                                With .Item(l)
                                    strData = Split(.Tag, Chr$(0))
                                    .Text = strData(0)
                                    .Tag = strData(1)
                                End With
                            Next l
                        End If
                    End With
                
                Case "NUMBER"
                    ' Sort Numerically
                    strFormat = String(30, "0") & "." & String(30, "0")
                    'Re-format the values so as they
                    ' can be sorted alphabetically.
                    With .ListItems
                        If (lngIndex > 0) Then
                            For l = 1 To .Count
                                With .Item(l).ListSubItems(lngIndex)
                                    .Tag = .Text & Chr$(0) & .Tag
                                    If IsNumeric(.Text) Then
                                        If CDbl(.Text) >= 0 Then
                                            .Text = Format(CDbl(.Text), _
                                            strFormat)
                                        Else
                                            .Text = "&" & InvNumber( _
                                            Format(0 - CDbl(.Text), _
                                            strFormat))
                                        End If
                                    Else
                                        .Text = ""
                                    End If
                                End With
                            Next l
                        Else
                            For l = 1 To .Count
                                With .Item(l)
                                    .Tag = .Text & Chr$(0) & .Tag
                                    If IsNumeric(.Text) Then
                                        If CDbl(.Text) >= 0 Then
                                            .Text = Format(CDbl(.Text), _
                                            strFormat)
                                        Else
                                            .Text = "&" & InvNumber( _
                                            Format(0 - CDbl(.Text), _
                                            strFormat))
                                        End If
                                    Else
                                        .Text = ""
                                    End If
                                End With
                            Next l
                        End If
                    End With
                    ' Sort the list alphabetically by this column
                    .SortOrder = (.SortOrder + 1) Mod 2
                    .SortKey = ColumnHeader.Index - 1
                    .Sorted = True
                
                    ' Restore the previous values to the 'cells' in this
                    ' column of the list from the tags, and also restore
                    ' the tags to their original values
                    With .ListItems
                        If (lngIndex > 0) Then
                            For l = 1 To .Count
                                With .Item(l).ListSubItems(lngIndex)
                                    strData = Split(.Tag, Chr$(0))
                                    .Text = strData(0)
                                    .Tag = strData(1)
                                End With
                            Next l
                        Else
                            For l = 1 To .Count
                                With .Item(l)
                                    strData = Split(.Tag, Chr$(0))
                                    .Text = strData(0)
                                    .Tag = strData(1)
                                End With
                            Next l
                        End If
                    End With
                Case Else
                    'Just sort it alphabetically
                    .SortOrder = (.SortOrder + 1) Mod 2
                    .SortKey = ColumnHeader.Index - 1
                    .Sorted = True
            End Select
            ' Unlock the list window so that the OCX can update it
            LockWindowUpdate 0&
            ' Restore the previous cursor
            .MousePointer = lngCursor
        End With
    "A myth is not the succession of individual images,
    but an integerated meaningful entity,
    reflecting a distinct aspect of the real world."

    ___ Adolf Jensen

  3. #3

    Thread Starter
    Frenzied Member sebs's Avatar
    Join Date
    Sep 2000
    Location
    Aylmer,Qc
    Posts
    1,606

    thanx

    that's exactly what i was looking for

  4. #4
    Lively Member Xero's Avatar
    Join Date
    Feb 2000
    Posts
    75
    ummm.... why don't you just put the Sorted property on the Listview control to true?

  5. #5
    _______ HeSaidJoe's Avatar
    Join Date
    Jun 1999
    Location
    Canada
    Posts
    3,946

    <?>

    try it and you will see why
    001
    010
    1000
    023
    0123
    00120020
    02001
    0019
    01020
    0100020
    not to mention the above allows the user to sort by alpha/date/number with a click on the title bar.



    [Edited by HeSaidJoe on 09-24-2000 at 08:52 PM]
    "A myth is not the succession of individual images,
    but an integerated meaningful entity,
    reflecting a distinct aspect of the real world."

    ___ Adolf Jensen

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width