20. oktober 2005 - 07:47
#1
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.
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!~)
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...
20. oktober 2005 - 15:44
#6
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
25. oktober 2005 - 12:46
#8
Hej Jesper.
Så er jeg tilbage på pinden.
Jeg er nået frem til følgende løsning.
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.