IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

comment relier combobox et listbox en delphi


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    Par défaut comment relier combobox et listbox en delphi
    Bonjour a tous je suis debutant
    mon probleme est que je n'ai pas pus relier un combobox avec une listbox pour que lorsque je change un item du combobox la listebox affiche les donnes corespond a cet item

    par exemple

    j'ai une base de donnee qui contient 2 tables
    1table s'appele categuories et contient id,categuorie
    2table s'appele listeproduit et contient ref,libproduit,idcateguorie
    je veus remplir le combobox par la table categuorie et lorsque je selectionne un item du combobox la listebox affiche les details du listproduit
    merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 125
    Par défaut
    Bonjour,
    Il me semble que la liaison se fera nécessairement aux niveau des composant base de données que vous utilisez. Il faudra très certainement définir une relation maitre-détail entre les deux composants basée sur le champ idcatégorie.

  3. #3
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 206
    Par défaut
    change la table1 par votre table catégorie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
    procedure TForm1.combobox1Change(Sender: TObject);
    var s : String;
    begin
        if combobox1.ItemIndex > -1 then begin
         listbox1.Items.Clear; 
         S := combobox1.Items[combobox1.ItemIndex]; 
         with Table1,listbox1.Items do begin
           if not(active) then open;
           first;
           while not(eof) do begin
             Add(FieldByName(S).AsString + #9+ Fields[0].AsString);
             next;
           end;
         end;
         listbox1.ItemIndex := 0;
     
        end;
    end;

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut
    Quelle Lib ? BDE ? ADO ? DBExpress ?
    Quelle DB ? Paradox ? ACCESS ? MySQL ?

    Si tu utilises une DB, pense que tu peux utiliser un TDBListBox relié à une TQuery avec un SQL paramètré dont la valeur est fournie par Combo.Text


    Avec TTable sur Paradox, un Filter\Filtered peut aussi être très pratique !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    change la table1 par votre table catégorie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
    procedure TForm1.combobox1Change(Sender: TObject);
    var s : String;
    begin
        if combobox1.ItemIndex > -1 then begin
         listbox1.Items.Clear; 
         S := combobox1.Items[combobox1.ItemIndex]; 
         with Table1,listbox1.Items do begin
           if not(active) then open;
           first;
           while not(eof) do begin
             Add(FieldByName(S).AsString + #9+ Fields[0].AsString);
             next;
           end;
         end;
         listbox1.ItemIndex := 0;
     
        end;
    end;


    merci bien mon ami j'utilise db access et j'ai fait une relation master detail je suis reussi a remplir le combobox avec un query par ce code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     DM.Query2.Close;
     
     DM.Query2.Open;
    DM.Query2.First;
     
      while not DM.Query2.Eof do
      begin
        ComboBox1.Items.Add(DM.Query2.FieldByName('categuorie').AsString);
        DM.Query2.Next;
      end;
     
    end;

    mais lorsque je click sur un item du combobox malgres que j'ai mis le code suivant dans l'evenement onchange du combobox



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    procedure TForm1.ComboBox1Change(Sender: TObject);
    var s : String;
    begin
        if combobox1.ItemIndex > -1 then begin
         listbox1.Items.Clear;
         S := combobox1.Items[combobox1.ItemIndex];
         with DM.table1,listbox1.Items do begin
           if not(active) then open;
           first;
           while not(eof) do begin
             Add(FieldByName(S).AsString + #9+ Fields[0].AsString);
             next;
           end;
         end;
         listbox1.ItemIndex := 0;
     
        end;
    end;

    rien ne ce passe, malgres que table1 est relieé a mon 2 table produit
    aider moi stp et merci une 2 fois

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 125
    Par défaut
    Je pense que tu te fatigues pour rien.
    Essaye un peu d'utiliser les composants DBLookupCombobox et DBlookUplistBox.
    Reliés sur des composants d'accès aux bases de données correctement configurés en Maitre6détail tu ne devrais pas avoir à gérer toutes ces listes. Le lien entre les deux devrait se faire automatiquement.

    Ensuite je pense qu'il faudrait si tu veux déboguer ton code mettre un point d'arrêt dans la méthode ComboBox1Change et suivre ce que fait ton programme lorsqu'il s’exécute.
    Bon courage

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut


    @misquinetata, as-tu lu le code MIWAN, es-tu sûr qu'il te convient, il utilise le contenu de la ComboBox comme nom de champ d'un autre Query !
    C'est assez douteux comme méthode !
    Si tu copies le code sans le comprendre, cela ne sert pas à grand chose et ne nous encourage pas à t'aider !
    Espérons que c'était une mauvaise passe temporaire !

    Pense à la documentation en Ligne du TTable et TQuery, je te conseil de t'y plonger sérieusement !

    Attention pour le Maitre-Détail, dans le cas présent, il n'est pas le bon choix puisque la ComboBox n'est pas associé à un DataSource mais sert plutôt comme assistant de recherche !

    Il manque effectivement dans la VCL un TComboBox avec juste un ListSource mais sans DataSource
    Le TDBLookupCombobox utilise DEUX Query différentes, il n'est pas applicable dans ce cas (sauf avec une bidouille avec un CDS bidon)

    @misquinetata, remplace ton TListBox par un TDBListBox connecté sur un TTable contenant l'ensemble de listeproduit
    D'ailleurs, évite de laisser ComboBox1, ListBox1, Table1, Query2 essaye des noms plus utilise comms ComboBoxSelectCategorie, ListBoxListeProduit, TableProduits, TableCategories, QueryCategories ...
    Pour mon exemple, ListBoxListeProduit remplace listbox1, c'est un TDBListBox

    le SELECT dans Query2 doit fournir id et categuorie de la table categuories

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    procedure TForm1.ComboBox1Change(Sender: TObject);
    var
      s : String;
    begin
      if combobox1.ItemIndex > -1 then
      begin
        if DM.Query2.Locate('categuorie', combobox1.Items[combobox1.ItemIndex], []) then
        begin
     
          ListBoxListeProduit.DataSource.DataSet.Filtered := False;
          ListBoxListeProduit.DataSource.DataSet.Filter := 'idcateguorie = ' + DM.Query2.FieldByName('id').AsString;
          ListBoxListeProduit.DataSource.DataSet.Filtered := True;
        end;
      end;
    end;
    On pourrait stocker ID dans Objects[] de la Combo, cela éviterait le locate !
    Sinon, il faudrait utiliser une requête à la place d'un TTable et faire une jointure !


    Pour en revenir au Maître-Détail, en utilisant deux TDBListBox, c'est une solution totalement différente, celle à laquelle pensait MickSou qui est impossible avec un TCombobox.
    la première TDBListBox est connectée sur la table Categories, la seconde sur Produits
    Ensuite, en mettant Categories comme MasterSource de Produits, ID comme MasterField, enfin dans IndexFieldNames, tu mets idcateguorie

    A lire impérativement : Comment faire de la table la partie détail d'un autre ensemble de données

    Tout peut se faire via l'IDE et même l'Expert de Fiche DB si ça existe dans ta version
    A toi de voir si tu veux le faire en code !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment avez-vous appris le langage Delphi ?
    Par NoisetteProd dans le forum Débuter
    Réponses: 368
    Dernier message: 08/05/2019, 23h34
  2. [XL-2003] Comment relier les 2 liste roulantes (Combobox)
    Par violet2410 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/07/2009, 16h40
  3. Comment remplir une ListBox sur Delphi 5
    Par bleuprogrammeur dans le forum Delphi
    Réponses: 3
    Dernier message: 10/06/2007, 21h06
  4. Comment modifier les .pas fournis avec Delphi ?
    Par prgasp77 dans le forum Langage
    Réponses: 2
    Dernier message: 09/02/2005, 15h12
  5. [Réseaux] Comment faire un Net Use en Delphi ?
    Par Spart64 dans le forum Web & réseau
    Réponses: 2
    Dernier message: 28/04/2004, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo