Trier une ListIcon par une base de données virtuelle SqLite
Publié : mar. 02/juin/2009 13:00
Il est possible de trier n'importe quelle liste et en particulier ne ListIcon en passant par l'intermédiaire d'une base et d'une table SqLite en mémoire.
Par contre, je sais qu'il est possible de passer par une callback pour cliquer sur les entêtes de colonnes mais c'est trop fort pour moi.
Si vous voulez compléter, merci d'avance.
Bon usage et salut à tous
Code : Tout sélectionner
OpenWindow(0, 0, 0, 320, 170, "Trier la liste", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0,10,10,300,130,"Noms",100,#PB_ListIcon_CheckBoxes)
AddGadgetColumn(0,1,"Prénom",100)
AddGadgetColumn(0,2,"N° de fiche",95)
AddGadgetItem(0,-1,"Gonzales"+Chr(10)+"Erwan"+Chr(10)+"412")
AddGadgetItem(0,-1,"Dugomier"+Chr(10)+"Sylvie"+Chr(10)+"38")
AddGadgetItem(0,-1,"Labarte"+Chr(10)+"Chantale"+Chr(10)+"84")
AddGadgetItem(0,-1,"Napoléon"+Chr(10)+"Premier"+Chr(10)+"1769")
AddGadgetItem(0,-1,"MoiMême"+Chr(10)+"Claude"+Chr(10)+"112")
ButtonGadget(1,10,145,90,20,"Tri par noms")
ButtonGadget(2,110,145,90,20,"Tri par prénoms")
ButtonGadget(3,210,145,90,20,"Tri par numéros")
Procedure.s TriListe(ordre.s)
Define enregistrement.s=""
UseSQLiteDatabase()
OpenDatabase(0, ":memory:", "", "")
DatabaseUpdate(0, "create table temp (col1 VARCHAR(100), col2 varchar(100),col3 integer)")
For compteur=0 To CountGadgetItems(0)-1
enregistrement=""
enregistrement+"'"+GetGadgetItemText(0,compteur,0)+"',"
enregistrement+"'"+GetGadgetItemText(0,compteur,1)+"',"
enregistrement+"'"+GetGadgetItemText(0,compteur,2)+"'"
DatabaseUpdate(0,"insert into temp values("+enregistrement+")")
Next
ClearGadgetItems(0)
DatabaseQuery(0,"Select * from temp order by "+ordre)
While NextDatabaseRow(0)
AddGadgetItem(0,-1,GetDatabaseString(0,0)+Chr(10)+GetDatabaseString(0,1)+Chr(10)+GetDatabaseString(0,2))
Wend
EndProcedure
Repeat
action = WaitWindowEvent()
If action = #PB_Event_Gadget
Select EventGadget()
Case 1:TriListe("col1")
Case 2:TriListe("col2")
Case 3:TriListe("col3")
EndSelect
EndIf
Until action = #PB_Event_CloseWindow
Si vous voulez compléter, merci d'avance.
Bon usage et salut à tous