Page 1 sur 1

[RESOLU] Trier une listIconGadget

Publié : mar. 26/déc./2017 15:52
par omega
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

Re: Trier une listIconGadget

Publié : mar. 26/déc./2017 17:09
par Micoute
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

Re: Trier une listIconGadget

Publié : mar. 26/déc./2017 17:38
par omega
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 !)

Re: Trier une listIconGadget

Publié : mar. 26/déc./2017 23:12
par omega
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

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