Bonjour à tous et joyeux Noel !
Ma question est très simple: Y a t-il un moyen de trier une listIconGadget? Jusqu'à présent, j'utilise une table (sqlite) pour résoudre ce problème ça marche mais c'est très lent ( il y a plus de 9500 lignes sur le grid).
Merci
[RESOLU] Trier une listIconGadget
[RESOLU] Trier une listIconGadget
Dernière modification par omega le mer. 27/déc./2017 16:13, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Re: Trier une listIconGadget
Voici un exemple que m'avais fourni falsam, si ça peut faire ton bonheur c'est l'époque des étrennes.
Code : Tout sélectionner
Structure mesDonnees
code$
tva$
produit$
EndStructure
Global Dim d.mesDonnees(2)
#WindowWidth = 500
#WindowHeight = 305
Procedure Trier()
For k=0 To 2
AddGadgetItem(5,-1,d(k)\code$+#LF$+d(k)\tva$+#LF$+d(k)\produit$)
Next k
EndProcedure
Procedure TrierCode()
SortStructuredArray(d(),#PB_Sort_Ascending,OffsetOf(mesDonnees\code$),#PB_String)
Trier()
EndProcedure
Procedure TrierTVA()
SortStructuredArray(d(),#PB_Sort_Ascending,OffsetOf(mesDonnees\tva$),#PB_String)
Trier()
EndProcedure
Procedure TrierArticle()
SortStructuredArray(d(),#PB_Sort_Ascending,OffsetOf(mesDonnees\produit$),#PB_String)
Trier()
EndProcedure
Procedure Vider()
ClearGadgetItems(5)
EndProcedure
If OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, "PureBasic - Démonstration Gadget Avancée", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
ButtonGadget(1, 50, 270, 100, 20, "Trier par code")
ButtonGadget(2, 200, 270, 100, 20, "Trier par TVA")
ButtonGadget(3, 350, 270, 100, 20, "Trier par produit")
ListIconGadget(5, 3, 50, 500, 200, "CODE BARRE", 131)
AddGadgetColumn(5, 1, "TVA", 200)
AddGadgetColumn(5, 2, "PRODUIT", 90)
Restore produits
For k=0 To 2
Read.s d(k)\code$
Read.s d(k)\tva$
Read.s d(k)\produit$
Next k
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
CloseWindow(0)
End
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Vider()
TrierCode()
Case 2
Vider()
TrierTVA()
Case 3
Vider()
TrierArticle()
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
EndIf
DataSection
produits:
Data.s "5601009345678","19.6%","Coca-cola"
Data.s "5601000000008","19.6%","Vin"
Data.s "5601009343333","5.5%","Beurre"
EndDataSection
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Trier une listIconGadget
Non, ça n'a pas marché à mon niveau je suis en train de voir la source de l'erreur -(il s'est bloqué et le grid est vide !)
Win7 (x64) 64 bits Pb 5.72
Re: Trier une listIconGadget
Voici un code de Falsam, il me l'a donné un jour et je l'ai complètement oublié. Il marche bien et répond parfaitement à mon attente. If faut forcément passer par là pour trier ensuite un grid.
Merci
Merci
Code : Tout sélectionner
;Tri / Sort structure
Structure Potager
Cle.s
Nom.s
Famille.s
EndStructure
NewList MonPanier.Potager()
AddElement(Monpanier())
MonPanier()\Cle="010910"
MonPanier()\Nom="Pomme"
MonPanier()\Famille="Fruit"
AddElement(Monpanier())
MonPanier()\Cle="090801"
MonPanier()\Nom="Concombre"
MonPanier()\Famille="Legume"
AddElement(Monpanier())
MonPanier()\Cle="010909"
MonPanier()\Nom="Peche"
MonPanier()\Famille="Fruit"
AddElement(Monpanier())
MonPanier()\Cle="021010"
MonPanier()\Nom="Tomate"
MonPanier()\Famille="Legume"
AddElement(Monpanier())
MonPanier()\Cle="010710"
MonPanier()\Nom="Abricot"
MonPanier()\Famille="Fuit"
;Tri / Sort Structu
SortStructuredList(MonPanier(), #PB_Sort_Ascending|#PB_Sort_NoCase, OffsetOf(Potager\Nom), #PB_Sort_String)
;Test
ForEach(MonPanier())
Debug Monpanier()\Nom
Next
Win7 (x64) 64 bits Pb 5.72