Afficher data à partir de la saisie

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

Afficher data à partir de la saisie

Message par omega »

Bonjour

Je souhaiterais afficher la liste des clients sur une grille au fur et à mesure que l'utilisateur saisit le mot clé caractère par caractère.
Exemple : Dès que l'utilisateur commence à saisir le texte : (en commençant par la lettre P par exemple) alors toute la liste des clients commençant par P sera affichée, ensuite dès que l'utilisateur ajoute le caractère suivant (la lettre A par exemple), c'est la liste commençant par PA qui sera affichée ect jusqu'à ce que l'utilisateur sélectionne sur la grille le client qui l'intéresse, je ne connais pas l'évènement qui fera ça. J'ai essayé ceci:

Code : Tout sélectionner

Enumeration
#WinSelCF
#SelCF_Grid
#Winstock
;Livraisons-------------------------------------------------------
#fbl_Titre
#fbl_FrameDoc
#fbl_new
#fbl_TxtNumDoc
#fbl_NumDoc
#fbl_selNumDoc
#fbl_TxtDate
#fbl_Date
#fbl_selDate
#fbl_TxtBc
#fbl_Bc
#fbl_TxtDocSource
#fbl_DocSource
#fbl_TxtCF
#fbl_Cf
#fbl_selCf
#fbl_FrameMaj
#fbl_TxtFam
#fbl_Fam
#fbl_selFam
#fbl_TxtRef
#fbl_Ref
#fbl_selRef
#fbl_TxtProd
#fbl_Prod
#fbl_selProd
#fbl_TxtUm
#fbl_Um
#fbl_selUm
#fbl_TxtQte
#fbl_Qte
#fbl_TxtPu
#fbl_Pu
#fbl_TxtMnt
#fbl_Mnt
#fbl_Valider
#fbl_Supprimer
#fbl_Imprimer
#fbl_AnnulerDoc
#fbl_grid
#fbl_FrameTotal
#fbl_TxtHT
#fbl_HT
#fbl_TxtFrais
#fbl_Frais
#fbl_TxtRemise
#fbl_Remise
#fbl_TxtTTC
#fbl_TTC
#fbl_FrameVer
#fbl_TxtModep
#fbl_Modep
#fbl_CheckEsp
#fbl_CheckCheq
#fbl_CheckVir
#fbl_Checkaterme
#fbl_FrameChauf
#fbl_FrameCamion
#fbl_Framemat
#fbl_Chauf
#fbl_Camion
#fbl_Mat
#fbl_selChauf
#fbl_selCamion
#fbl_selmat
#fbl_FrameStock
#fbl_StockDisp
#fbl_Pmp
#fbl_EnregistrerDoc
endEnumeration

Procedure AfficherGridSelCF()
OpenWindow(#WinSelCF, 0,0, 500, 200, "Sélectionnez un client-fournisseur",#PB_Window_SystemMenu |#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#WinSelCF))
   wrow=20
   ListIconGadget(#SelCF_Grid, 10, wrow, 480, 180, "Code", 40, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
   AddGadgetColumn(#SelCF_Grid,1, "Client - fournisseur", 200)
   AddGadgetColumn(#SelCF_Grid,2, "Adresse", 100)
   AddGadgetColumn(#SelCF_Grid,3, "Rc", 100)
   AddGadgetColumn(#SelCF_Grid,4, "MF", 100)
   AddGadgetColumn(#SelCF_Grid,5, "ART",100)
   AddGadgetColumn(#SelCF_Grid,6, "NIS",100)
EndIf

;Remplir le grid en fonction des caractères saisis
input$=UCase(input$)
wtaille=Len(input$)
sql="select * from fcf order by cf"
CheckDatabaseQuery(idcf,sql)
While NextDatabaseRow(idcf)
  codecf$=GetDatabaseString(idcf,0)
  cf$=UCase(GetDatabaseString(idcf,1))
  ad$=UCase(GetDatabaseString(idcf,2))
  rc$=UCase(GetDatabaseString(idcf,4))
  mf$=UCase(GetDatabaseString(idcf,5))
  art$=UCase(GetDatabaseString(idcf,6))
  nis$=UCase(GetDatabaseString(idcf,7))
  If (Left(cf$,wtaille) = input$)
     AddGadgetItem(#SelCf_grid,-1,codecf$+Chr(10)+cf$+Chr(10)+ad$+Chr(10)+rc$+Chr(10)+mf$+Chr(10)+art$+Chr(10)+nis$)
  EndIf
Wend
     
wquitSelCF=0
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
   Select EventGadget()
   Case #SelCf_grid
         wrow=GetGadgetState(#SelCf_grid)
         If wrow>=0 And wrow<CountGadgetItems(#SelCf_grid)
            codecf$=GetGadgetItemText(#SelCf_grid,wrow,0) 
            cf$=GetGadgetItemText(#SelCf_grid,wrow,1) 
            ad$=GetGadgetItemText(#SelCf_grid,wrow,2) 
            rc$=GetGadgetItemText(#SelCf_grid,wrow,3) 
            mf$=GetGadgetItemText(#SelCf_grid,wrow,4) 
            art$=GetGadgetItemText(#SelCf_grid,wrow,5) 
            nis$=GetGadgetItemText(#SelCf_grid,wrow,6) 
            SetGadgetText(#fbl_cf,cf$)
            wquitSelCF=1
       endif
   EndSelect
EndIf   
Until wquitSelCF=1
CloseWindow(#winSelCF)
EndProcedure

Procedure Run_stock()
quitWinstock=0
wMask$=FormatDate("%dd/%mm/%yyyy", Date())
date$=wMask$
ExamineDesktops()
Wlargeur=DesktopWidth(0)
Whauteur=DesktopHeight(0)
OpenWindow(#Winstock, 0,0,0,0, "Logiciel de gestion commerciale - stocks", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_Maximize)
WLar=Wlargeur-50:WHaut=Whauteur-100 
If CreateGadgetList(WindowID(#Winstock))
   PanelGadget(#Panel, 10,10, WLar, WHaut)
   AddGadgetItem (#Panel, -1, " LIVRAISON ");***************************************************
   TextGadget(#fbl_Titre, 20, 20, 560, 30, "BON DE LIVRAISON")
   wrow=50
   Frame3DGadget(#fbl_FrameDoc, 10, wrow, 940,80, "",#PB_Frame3D_Flat)
   wrow=wrow+20
   TextGadget(#fbl_TxtNumDoc, 20, wrow, 60, 20, "N° BL:")
   StringGadget(#fbl_NumDoc, 80, wrow, 60, 20, "")
   TextGadget(#fbl_TxtDate,160, wrow, 60, 20, "Date:")
   StringGadget(#fbl_Date,190, wrow, 90, 20, date$)
   DateGadget(#fbl_SelDate,190, wrow+25, 90, 20,"%dd/%mm/%yyyy")
   TextGadget(#fbl_TxtCF, 650, wrow, 110, 20, "CLIENT:")
   StringGadget(#fbl_CF, 740, wrow, 200, 20, "",#PB_String_UpperCase)
   wrow=wrow+60
   Frame3DGadget(#fbl_FrameMaj, 10, wrow, 940,110, "",#PB_Frame3D_Flat)
   wrow=wrow+20
   TextGadget(#fbl_Txtfam,20, wrow, 80, 20, "Famille:")
   StringGadget(#fbl_fam,80, wrow, 150, 20, "")
   ComboBoxGadget(#fbl_selFam,80, wrow+25, 150, 100)
   TextGadget(#fbl_Txtref,290, wrow, 80, 20, "Référence:")
   StringGadget(#fbl_ref,350, wrow, 80, 20, "")
   ComboBoxGadget(#fbl_selref,350, wrow+25, 80, 100)
   TextGadget(#fbl_TxtProd,470, wrow, 120, 20, "Désignation:")
   StringGadget(#fbl_prod,540, wrow, 400, 20, "")
   ComboBoxGadget(#fbl_selProd,540, wrow+25, 400, 100)
   wrow=wrow+60
   TextGadget(#fbl_TxtUm,20, wrow, 50, 20, "UM:")
   StringGadget(#fbl_Um,80, wrow,70, 20,"") 
   ComboBoxGadget(#fbl_selUm,160, wrow, 70, 100)
   TextGadget(#fbl_TxtQte,300, wrow, 60, 20, "Quantité:")
   StringGadget(#fbl_Qte,350, wrow, 80, 20,"")
   TextGadget(#fbl_TxtPu,470, wrow,100, 20,"Prix unitaire:")
   StringGadget(#fbl_pu,540, wrow, 100,20,"")
   TextGadget(#fbl_TxtMnt,770, wrow,70, 20,"Montant:")
   StringGadget(#fbl_Mnt,840, wrow, 100, 20,"")
   wrow=wrow+40
   ButtonGadget(#fbl_Imprimer, 10, wrow, 100, 30, "Imprimer")
   ButtonGadget(#fbl_AnnulerDoc, 250, wrow, 120, 30, "Annuler la livraison")
   ButtonGadget(#fbl_supprimer, 400, wrow, 160, 30, "Supprimer la ligne sélectionnée")
   ButtonGadget(#fbl_New, 600, wrow, 120, 30, "Nouvelle livraison")
   ButtonGadget(#fbl_Valider, 850, wrow, 100, 30, "Valider")
   wrow=wrow+35
   ListIconGadget(#fbl_Grid, 10, wrow, 940, 150, "Code", 40, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
   AddGadgetColumn(#fbl_Grid,1, " Désignation du produit", 300)
   AddGadgetColumn(#fbl_Grid,2, " U.M.", 90)
   AddGadgetColumn(#fbl_Grid,3, " Quantité", 80)
   AddGadgetColumn(#fbl_Grid,4, " Prix unitaire", 100)
   AddGadgetColumn(#fbl_Grid,5, " Montant", 100)
   wrow=wrow+160: wlig=wrow
   Frame3DGadget(#fbl_FrameVer,10, wrow, 500, 60, "")
   wrow=wrow+15
   TextGadget(#fbl_TxtModep,20, wrow, 140, 20, "Mode de payement:")
   StringGadget(#fbl_Modep,140, wrow, 300, 20,"", #PB_String_UpperCase)
   wrow=wrow+20
   OptionGadget(#fbl_CheckEsp,20, wrow, 100, 20,"ESPECE")
   OptionGadget(#fbl_CheckCheq,120, wrow, 100, 20,"CHEQUE")
   OptionGadget(#fbl_CheckVir,220, wrow, 140, 20,"VIREMENT BANCAIRE")
   OptionGadget(#fbl_CheckAterme,390, wrow, 100, 20,"A TERME")
   wrow=wrow+30
   Frame3DGadget(#fbl_FrameChauf,10, wrow, 170, 65, "Chauffeur")
   Frame3DGadget(#fbl_FrameCamion,190, wrow, 160, 65, "Camion")
   Frame3DGadget(#fbl_FrameMat,360, wrow, 150, 65, "Matricule")
   wrow=wrow+15
   StringGadget(#fbl_chauf,20, wrow, 150, 20,"", #PB_String_UpperCase)
   StringGadget(#fbl_Camion,200, wrow,140, 20,"", #PB_String_UpperCase)
   StringGadget(#fbl_Mat,370, wrow,130, 20,"", #PB_String_UpperCase)
   wrow=wrow+22
   ComboBoxGadget(#fbl_selchauf,20, wrow, 150,30)
   ComboBoxGadget(#fbl_selcamion,200, wrow, 140,30)
   ComboBoxGadget(#fbl_selmat,370, wrow, 130,30)
   wrow=wlig
   Frame3DGadget(#fbl_FrameStock,515, wrow, 100, 130, "Stock disponible")
   TextGadget(#fbl_StockDisp,520, wrow+20,80, 20, "",#PB_Text_Center)
   TextGadget(#fbl_Pmp,520, wrow+70,80, 20, "",#PB_Text_Center)
   wrow=wlig
   Frame3DGadget(#fbl_FrameTotal,620, wrow, 310, 130, "")
   TextGadget(#fbl_TxtHT,640, wrow+20, 140, 20, "TOTAL HT :")
   StringGadget(#fbl_Ht,750, wrow+20, 120, 20,"",#PB_String_ReadOnly | #PB_Text_Right)
   wrow=wrow+25
   TextGadget(#fbl_TxtFrais,640, wrow+20, 140, 20, "FRAIS ET TAXES :")
   StringGadget(#fbl_Frais,750, wrow+20, 120, 20,"",#PB_Text_Right)
   wrow=wrow+25
   TextGadget(#fbl_TxtRemise,640, wrow+20, 140, 20, "REMISE :")
   StringGadget(#fbl_Remise,750, wrow+20, 120, 20,"",#PB_Text_Right)
   wrow=wrow+25
   TextGadget(#fbl_TxtTTC,640, wrow+20, 140, 20, "TOTAL TTC :")
   StringGadget(#fbl_TTC,750, wrow+20, 120, 20,"",#PB_String_ReadOnly | #PB_Text_Right)
   ButtonGadget(#fbl_EnregistrerDoc, 620, wrow+60, 310, 30, "ENREGISTRER LE BON DE LIVRAISON")
   AddGadgetItem (#Panel, -1, " FERMER");***************************************************
EndIf

quitWinstock=0

Repeat
EventId=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
   quitWinstock=1
EndIf

If EventID = #PB_Event_Gadget
   Select EventGadget()

   Case #fbl_seldate
        wdate=GetGadgetState(#fbl_seldate)
        date$=FormatDate("%dd/%mm/%yyyy", wDate)
        SetGadgetText(#fbl_date,date$)
   
   Case #fbl_selnumdoc
        n=GetGadgetState(#fbl_selnumdoc)
        If n>=0
           numdoc$=GetGadgetText(#fbl_selnumdoc)
           If numdoc$<>""
              SetGadgetText(#fbl_numdoc,numdoc$)
              fbl_afficherDoc()
           EndIf
        EndIf

  ;ça se psse ici..............................
   Case #fbl_cf
         input$=GetGadgetText(#fbl_cf)
         If Len(input$)>0
            doc$="BL"
            AfficherGridSelCF()
         EndIf      


   ;:----------------------------------------------------------------------------------------------------------

   Case #jstock_reorganiser
         jstock_reorganiser()
         
   Case #jstock_afficher
         jstock_afficher()

   Case #jstock_imprimer
         Print_jstockPmp()

   ;:----------------------------------------------------------------------------------------------------------
   Case #panel
        wpanel=GetGadgetState(#panel)
        If wpanel=7
           quitwinstock=1
        EndIf
         
   EndSelect
EndIf            
Until  quitwinstock=1
CloseWindow(#Winstock)
EndProcedure


D'abord l'utilisateur ne veut pas appuyer sur tache (ENTREE) après avoir saisi le mot clé, il préfère que la liste des clients sera affichée au fur et à mesure qu'il tape les caractères du mot clé (à chaque nouveau caractère saisi, une liste sera affichée), voici ce qui se passe avec mon code:

Quand l'utilisateur tape la 1ère lettre, la liste des clients est affichée et le contenu est correct, mais l'utilisateur ne pourra plus ajouter d'autres lettres??

Qu dois je faire ?

Merci de votre aide
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Afficher data à partir de la saisie

Message par microdevweb »

Voici un exemple avec un petit filtre, si j'ai bien compris ta question

Code : Tout sélectionner

UseSQLiteDatabase()
Global Db=OpenDatabase(#PB_Any,":memory:","","")
Enumeration 
    #MainForm
    #MainList
    #Filters
EndEnumeration
Procedure CreateTable()
    Protected query.s
    query="CREATE TABLE client ("
    query+"name TEXT)"
    If DatabaseUpdate(Db,query)=0
        MessageRequester("Database Error","Can not create table")
        ProcedureReturn #False
    EndIf
    ProcedureReturn #True
EndProcedure
Procedure FillTable(name.s)
    Protected query.s
    query="INSERT INTO client ("
    query+"name) VALUES ("+Chr(34)+name+Chr(34)+")"
    If DatabaseUpdate(Db,query)=0
        MessageRequester("Database Error",DatabaseError())
        ProcedureReturn #False
    EndIf
    ProcedureReturn #True
EndProcedure
Procedure MakeClient()
    FillTable("Grumeaux")
    FillTable("Maurico")
    FillTable("Grosard")
    FillTable("Foulard")
EndProcedure
Procedure FillList()
    Protected Filters.s=GetGadgetText(#Filters)
    Protected query.s
    query="SELECT name FROM client"
    ; Si il y à un filtre je l'ajoute
    If Filters<>""
        query+" WHERE name LIKE '"+Filters+"%'"
    EndIf
    If DatabaseQuery(Db,query)=0
        MessageRequester("Database Error",DatabaseError())
        ProcedureReturn #False
    EndIf
    ClearGadgetItems(#MainList)
    While NextDatabaseRow(Db)
        AddGadgetItem(#MainList,-1,GetDatabaseString(Db,0))
    Wend
EndProcedure
Procedure Exit()
    End
EndProcedure
Procedure OpenMainForm()
    Protected flag=#PB_Window_SystemMenu|#PB_Window_ScreenCentered
    Protected X=10,Y=0,WF=800,HF=600
    OpenWindow(#MainForm,0,0,WF,HF,"Teste filtre",flag)
    TextGadget(#PB_Any,X,Y,100,30,"Filtre:")
    Y+40
    StringGadget(#Filters,X,Y,100,30,"")
    Y+40
    ListViewGadget(#MainList,X,Y,WF-20,HF-(Y+10))
    BindEvent(#PB_Event_CloseWindow,@Exit(),#MainForm)
    BindGadgetEvent(#Filters,@FillList())
    FillList()
EndProcedure
; Création de la table
CreateTable()
; Création de quelques clients
MakeClient()

; Ouverture de la fenêtre
OpenMainForm()

; MainLoop
Repeat:WaitWindowEvent():ForEver

Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Afficher data à partir de la saisie

Message par venom »

J'aurais chercher du côté de CountString(Chaine$, ChaineATrouver$)







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Afficher data à partir de la saisie

Message par Marc56 »

@ microdevweb

J'aime ta façon de procéder :)

Code : Tout sélectionner

    If Filters<>""
        query+" WHERE name LIKE '"+Filters+"%'"
    EndIf

Code : Tout sélectionner

BindGadgetEvent(#Filters,@FillList())
Simple, clair, efficace, sans appel aux API. Bravo 8)

Perso, j'avais envisagé d'utiliser tout le jeu des raccourcis claviers, lettre par lettre :mrgreen: Ta méthode est bien plus élégante et logique :idea:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Afficher data à partir de la saisie

Message par Ar-S »

tu peux jeter un oeil à la méthode que j'ai utilisé pour mon petit : xyloglotus
C'est de l'auto-complétion.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre