[RESOLU] Trier une listIconGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU] Trier une listIconGadget

Message 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
Dernière modification par omega le mer. 27/déc./2017 16:13, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Trier une listIconGadget

Message 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
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 !
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Trier une listIconGadget

Message 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 !)
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Trier une listIconGadget

Message 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  
Win7 (x64) 64 bits Pb 5.72
Répondre