Man vil nok opdatere og sortere kilden til listboxen og så genfylde den. Hvis den er baseret på en tabel kan man sortere SQL'en inden du fylder listboxen. Hvis listboxen er baseret på en Værdiliste kan kommer det lidt an på, hvor værdierne kommer fra. Hvis de er helt tilfældige/beregnede eller andet, som ikke let kan genskabes et sted fra kan du evt. overføre værdierne til et array > sortere array'et og genfylde listboxen.
Synes godt om
Slettet bruger
20. oktober 2005 - 07:50#2
Sådan som du stiller spørgsmålet vil jeg umiddelbart sige nej, men sorteringen ligger jo på listboxens forespørgsel. Derfor skal sorteringen foregå i forespørgslen og hvis du på en eller anden måde indsætter eller skriver i listboxen, så må du lave en Me.Listbox.Requery på AfterUpdate hændelsen, før denne sortering træder i kraft!~)
Synes godt om
Slettet bruger
20. oktober 2005 - 07:52#3
Det er irriterende at der ikke er en autoupdate på siden, men det kan man måske ikke rigtigt i praksis...
Ok, så prøver jeg med dette. Du kan sortere et array med en "Bubblesort"-funktion. Den kommer her og skal klippes ind i et standardmodul i databasen.
Function BubbleSort(ToSort As Variant, Optional SortAscending As Boolean = True) As Variant Dim AnyChanges As Boolean Dim l As Long Dim SwapFH As Variant Do AnyChanges = False For l = LBound(ToSort) To UBound(ToSort) - 1 If (ToSort(l) > ToSort(l + 1) And SortAscending) _ Or (ToSort(l) < ToSort(l + 1) And Not SortAscending) Then ' These two need to be swapped SwapFH = ToSort(l) ToSort(l) = ToSort(l + 1) ToSort(l + 1) = SwapFH AnyChanges = True End If Next l Loop Until Not AnyChanges End Function
For at lægge en sorteret list ind som kildeliste til din listbox kan du bruge dette. Jeg har lavet et eksempel med et array med 7 elementer, men du skal først indsamle listen fra din listbox.
Function SorterListBox() Dim i As Integer Dim sListe As String Dim arr(6) As Variant arr(0) = 2 arr(1) = 6 arr(2) = 8 arr(3) = 9 arr(4) = 1 arr(5) = 3 arr(6) = 4 'nu er arrayet lavet, så skal det sorteres BubbleSort arr, True
'Lav array om til liste og sæt i listbox For i = LBound(arr) To UBound(arr) sListe = sListe & arr(i) & ";" Next Forms!form1!list0.RowSource = sListe End Function
Først putter jeg alle mine data direkte ind i et dynamisk array i 2 dimensioner. Sorterer mit array med følgende kode.
Private Sub BubbleSort(ToSort As Variant, Optional SortAscending As Boolean = True) Dim AnyChanges As Boolean Dim l As Long Dim SwapFH0 As Variant Dim SwapFH1 As Variant Dim SwapFH2 As Variant Dim SwapFH3 As Variant Dim SwapFH4 As Variant Dim SwapFH5 As Variant Do AnyChanges = False For l = 0 To pCount - 1 If (ToSort(2, l) > ToSort(2, l + 1) And SortAscending) Or _ (ToSort(2, l) < ToSort(2, l + 1) And Not SortAscending) Then ' These two need to be swapped SwapFH0 = ToSort(0, l) SwapFH1 = ToSort(1, l) SwapFH2 = ToSort(2, l) SwapFH3 = ToSort(3, l) SwapFH4 = ToSort(4, l) SwapFH5 = ToSort(5, l) ToSort(0, l) = ToSort(0, l + 1) ToSort(1, l) = ToSort(1, l + 1) ToSort(2, l) = ToSort(2, l + 1) ToSort(3, l) = ToSort(3, l + 1) ToSort(4, l) = ToSort(4, l + 1) ToSort(5, l) = ToSort(5, l + 1) ToSort(0, l + 1) = SwapFH0 ToSort(1, l + 1) = SwapFH1 ToSort(2, l + 1) = SwapFH2 ToSort(3, l + 1) = SwapFH3 ToSort(4, l + 1) = SwapFH4 ToSort(5, l + 1) = SwapFH5 AnyChanges = True End If Next l Loop Until Not AnyChanges End Sub
pCount er en global variabel med størrelsen af arrayet. Så bliver det hele flyttet fra arrayet til listen med følgende kode.
For i = 0 To pCount - 1 Me.lstRekorder.AddItem Item:=pArray(0, i) & ";" & pArray(1, i) & ";" & _ pArray(2, i) & ";" & pArray(2, i) & ";" & _ pArray(4, i) & ";" & pArray(5, i) Next
Sikkert ikke den mest elegante løsning, men det virker. Tak for hjælpen.
Synes godt om
Ny brugerNybegynder
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.