Sign in to follow this  
Followers 0
LeCarre

ListView Sort Callback = Confused

2 posts in this topic

#1 ·  Posted (edited)

Not Newbie to coding, but have not used listview many times, and callback sorts even less ;)

First time posting code with tags, hope this is readable...

FYI - I'm trying to sort time, and my solution is to convert time to ticks in a column that will eventually be out of view

and when user sorts the "00:00:00" column, i'll sort the hidden ticks column instead.

Problem: Can't get it tho, why this code is producing odd sorting results in my listview

The console shows proper evaluation of each numerical comparison.

Func LVSort($hWnd, $nItem1, $nItem2, $nColumn)
     Local $nSort, $val1, $val2, $nResult

     ; Switch the sorting direction
     If $nColumn = $nCurCol Then
          If Not $bSet Then
               $nSortDir = $nSortDir * - 1
               $bSet = 1
          EndIf
     Else
          $nSortDir = 1
     EndIf

     $nCol = $nColumn

     $val1 = GetSubItemText($hWnd, $nItem1, $nColumn)
     $val2 = GetSubItemText($hWnd, $nItem2, $nColumn)

     ; If it is the 3rd colum (column starts with 0) then compare the dates
     If $nColumn = 2 Then
          $val1 = StringRight($val1, 4) & StringMid($val1, 4, 2) & StringLeft($val1, 2)
          $val2 = StringRight($val2, 4) & StringMid($val2, 4, 2) & StringLeft($val2, 2)
     EndIf

     if $nColumn = 2 Then
          ; ConsoleWrite($Val1 & " " & $Val2 & @CRLF)
          If Number($val1) < Number($val2) Then
               $nResult = -1 ; Put item2 before item1
               ConsoleWrite($Val1 & " < " & $Val2 & @CRLF)
          Else
               $nResult = 1 ; Put item2 before item1
               ConsoleWrite($Val1 & " > " & $Val2 & @CRLF)
          EndIf
     EndIf

     If $val1 < $val2 Then
          $nResult = -1 ; Put item2 before item1
     ElseIf $val1 > $val2 Then
          $nResult = 1 ; Put item2 behind item1
     EndIf

     $nResult = $nResult * $nSortDir

     Return $nResult
EndFunc   ;==>LVSort

Results in my list are... um, confusing.

90061000

315000

122560000

1224610000

1061000

10000

1000

100

10

0

PS why is there no emoticon for coffee, or pizza?

Edited by LeCarre

Share this post


Link to post
Share on other sites



Nothing like 30 minutes of baking my brain on unfamiliar code to solve the problem.

I patched this together from 2 sources, added my own, and the problem was that my code

executed fine, and was then altered by a following piece of code.

If $val1 < $val2 Then
     $nResult = -1 ; Put item2 before item1
ElseIf $val1 > $val2 Then
     $nResult = 1 ; Put item2 behind item1
EndIf

which would alter any previous $nResults

;) <--- Imagine coffee mug

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0