Jump to content

Recommended Posts

Posted

How can I sort as shown below after I load a listview from a file? I tried following the example except I'm loading a full file in instead. This doesn't work. Thanks.

#include <GuiConstantsEx.au3>
 #include <GuiListView.au3>
 #include<File.au3>
 
 $Gui = GUICreate("Test", 300, 200)
 $hListView = GUICtrlCreateListView("Items|SubItems", 2, 2, 296, 196, BitOR($LVS_EDITLABELS, $LVS_REPORT))
 _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
 
 GUISetState()
 
;~ getLVitems()
;Dim $File_Array
 Dim $temp
 $File = "D:\Index\Utilities\Autoit\Scripts\test.txt"
 _FileReadToArray($File, $temp)
 
 $no = $temp[0] - 1
 Dim $result[$no][2]
 
 For $x = 1 To $no
     $t = StringSplit($temp[$x], ",")
     $result[$x - 1][0] = $t[1]
     $result[$x - 1][1] = $t[2]
 Next
 
 _GUICtrlListView_AddArray($hListView, $result)
 _GUICtrlListView_RegisterSortCallBack($hListView)
 
 While 1
     Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE
             ExitLoop
         Case $hListView
             _GUICtrlListView_SortItems($hListView, GUICtrlGetState($hListView))
     EndSwitch
 WEnd

Here's some of Text.txt contents:

Item1,44
 Item2,22
 Item1,11
 Item2,33
 Item3,
 Item1,
 Item2,
 Item3,
 Item1,
Posted

Try

#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <WindowsConstants.au3>

$Gui = GUICreate("Test", 300, 200)
$hListView = GUICtrlCreateListView("Items|SubItems", 2, 2, 296, 196, BitOR($LVS_EDITLABELS, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER ))

Dim $aFile
$File = "D:\Index\Utilities\Autoit\Scripts\test.txt"
_FileReadToArray($File, $aFile)

$iSize = $aFile[0]
Dim $result[$iSize][2]

For $x = 1 To $iSize
    $aCol = StringSplit($aFile[$x], ",")
    $iIndex = _GUICtrlListView_AddItem($hListView, $aCol[1], -1, $x)
    For $y = 2 To $aCol[0]
        _GUICtrlListView_AddSubItem($hListView, $iIndex, $aCol[$y], $y - 1)
    Next
Next
GUISetState()

_GUICtrlListView_RegisterSortCallBack($hListView)
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $hListView
        ; Kick off the sort callback
            _GUICtrlListView_SortItems($hListView, GUICtrlGetState($hListView))
    EndSwitch
WEnd
_GUICtrlListView_UnRegisterSortCallBack($hListView)
GUIDelete()

Posted

That works, thanks. Is that because the listview must be populated line by line and just adding an array doesn't work with the sort?

Yes, it appears for sort to work using _GUICtrlListView_RegisterSortCallBack requires _GUICtrlListView_AddItem to have a value in $iParam. I normally use _GUICtrlListView_SimpleSort.
Posted

Yes, it appears for sort to work using _GUICtrlListView_RegisterSortCallBack requires _GUICtrlListView_AddItem to have a value in $iParam. I normally use _GUICtrlListView_SimpleSort.

Thanks for the explanation and the tip.
  • 1 year later...
Posted

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...