Avatar billede martin_moth Mester
25. juni 2002 - 15:48 Der 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
Avatar billede kaffe Nybegynder
25. juni 2002 - 16:35 #1
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
Avatar billede martin_moth Mester
25. juni 2002 - 16:41 #2
Det virker ikke :o( Har du selv prøvet, om det virker hos dig?

Trykker du f.eks. på kolonnen "Størrelse", sorterer den alfabetisk og ikke numerisk, somom det var tekst, dvs.

100
20
3000
4

og ikke

4
20
3000
100

Det samme med datoerne...
Avatar billede martin_moth Mester
25. juni 2002 - 16:41 #3
Sorry, jeg mener naturligvis

"og ikke

4
20
100
3000 ... ;o)
Avatar billede kaffe Nybegynder
25. juni 2002 - 17:08 #4
Jeg læste det som om du kun kunne få den sorteret efter første kolonne og der ikke skete noget når du trykkede på de andre kolonneoverskrifter.

Jeg tror ikke at der er nogen mulighed for at få den til at sortere numerisk, men kigger lige på det.
Avatar billede martin_moth Mester
25. juni 2002 - 17:24 #5
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).

Men venter og ser om du finder ud af noget ;o)
Avatar billede martin_moth Mester
25. juni 2002 - 17:26 #6
PS. Der mangler naturligvis

Fjern_Usorterede_items_og_genindlæs_Items_fra_sorteret_array 'eller collection ;o)
Avatar billede kaffe Nybegynder
25. juni 2002 - 18:16 #7
Jeg har ikke været i stand til at finde noget der kan gøre det nemmere end det du selv har gang i.

Beklager og held og lykke med det...
Avatar billede martin_moth Mester
25. juni 2002 - 18:46 #8
Tak alligevel :o)
Avatar billede kaffe Nybegynder
25. juni 2002 - 21:25 #9
Tak for points :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

JP/Politikens Hus

Digital Workplace Supporter

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Vil du være med til at opbygge og udvikle Forsvarets dronekapacitet?

Riskpoint A/S (Riskpoint Solutions Limited)

IT Business Analyst

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger leder til Lokal IT Servicecenter i Holstebro