25. juni 2002 - 15:48Der er
7 kommentarer og 2 løsninger
Sortering af items i ListView1
Her er lidt kode jeg selv har skrevet, samt snuppet fra diverse steder. En form med en Dir1, en ListView1 og en Command1. Spørgsmålet står i koden under ListView1_ColumnClick - jeg kan ikke få den til at sorterer efter størrelse eller dato, kun filnavn...?
Option Explicit
Private Sub Command1_Click() Dim FSO As FileSystemObject Dim itmX 'as what?? Dim MyFolder As folder Dim MyFolderFiles As Files Dim MyFile As File Dim i As Byte
'Smider alle filer fra Dir1.Path ind i ListView1 ListView1.ListItems.Clear Set FSO = CreateObject("Scripting.FileSystemObject") Set MyFolder = FSO.GetFolder(Dir1.Path) For Each MyFile In MyFolder.Files Set itmX = ListView1.ListItems.Add(, , MyFile.Name) itmX.SubItems(1) = MyFile.Size itmX.SubItems(2) = MyFile.DateLastModified Next MyFile
End Sub
Private Sub Form_Load() 'Sætter kolonner for ListView1 With ListView1 .view = 3 .ColumnHeaders.Add , , "Navn", 2000 .ColumnHeaders.Add , , "Størrelse", 200, lvwColumnRight .ColumnHeaders.Add , , "Ændret", 2000 End With End Sub
Private Sub ListView1_ColumnClick(ByVal _ ColumnHeader As MSComctlLib.ColumnHeader)
'Sorterer data... 'Virker KUN ved filnavnene, ikke ved 'datoerne og filstørrelse hvis 'filstørrelserne ikke har samme antal cifre 'PS. Koden er snuppet fra Eksperten - 'og er ikke 100% forstået :o(
With ListView1 If .SortOrder = lvwAscending Then .SortOrder = lvwDescending Else .SortOrder = lvwAscending End If .Sorted = True End With End Sub
Du mangler bare at fortælle hvilken kolonne der skal sorteres efter. Det gøres med listview1.Sortkey = columnheader.index - 1. Sådan her:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) ListView1.Sorted = True ListView1.SortKey = ColumnHeader.Index - 1 If ListView1.SortOrder = lvwAscending Then ListView1.SortOrder = lvwDescending Else ListView1.SortOrder = lvwAscending End If End Sub
Man kan jo "fuske" sig ud af det - ved at gøre følgende:
ListView1_ColumnClick
Fyld_Alle_ListItems_i_et_array ' (eller en collection) Sorter_Ovenstående_Array_efter_ColumnHeader_Index
End Sub
Jeg har Fyld_Alle_Li... og Sorter_Ovenståen... liggende på lager, så det bliver ikke så stort et problem. Men dethavde været mere elegant hvis man kunne få den til selv at sortere efter VÆRDIEN af de items der er i listview'et, i stedet for blot at opfatte alle items som tekst og sortere efter det (alfabetisk).
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.