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

Composants VCL Delphi Discussion :

Combobox multi colonne


Sujet :

Composants VCL Delphi

  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut Combobox multi colonne
    salut j'ai actuellement un soucis face à mon projet sous Delphi.
    en fait je voudrais connaitre s'il existe un controle intégré à delphi qui permet d'associer plusieurs colonne à un Items d'un combobox. ceci pour la gestion des tables Père/Fils ou j'affiche le libelé et je cache le code de l'enregistrement.
    merci de votre aide

  2. #2
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 705
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 705
    Par défaut
    Moi, pour faire ça, j'ai refait un composants héritant de la TComboBox, dans laquelle je rajoute une TStringList, que je dessine (ou pas) dans le OnDraw.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 029
    Par défaut
    Citation Envoyé par Lung Voir le message
    Moi, pour faire ça, j'ai refait un composants héritant de la TComboBox, dans laquelle je rajoute une TStringList, que je dessine (ou pas) dans le OnDraw.
    Je pense qu'il est inutile d'en arriver à programmer un nouveau composant. Je ne sais pas comment tu as fait ton compo mais je suppose que lorsque tu fait une opération genre un tri, tu trie également à la mano la StringList pour que les données restent cohérentes. Idem pour l'ajout ou le retrait d'un item.

    Puisque Agina ne veux pas afficher la deuxième colonne, autant créer une StringList extérieur pour le faire, ça sera moins compliquer que de créer un composant

  4. #4
    Membre averti
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut je vais éssayer
    merci de votre prompte réaction. mais je crois que pour un débutant, la solution de POPO pourrais me convenir. reste seulement à trouver un bon tutos pour la mise en oeuvre. Mais à tout azard quels sont les caractéristiques des controles DBCombobox et TDBLOOKUPcombobox ne peuvent ils pas ressoudre le problème?
    merci

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    oui bien sûr, le DBComboBox permet d'afficher plusieurs colonnes. Regardes en l'aide de Delphi c'est détaillé.

  6. #6
    Membre averti
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut ca pas marché!!
    j'ai exploré le controle Tstringlist mais j'avoue que c'est pas vraiment ce que je cherche bref si j'ai bien regardé ca ne resoud pas mon problème. et pour ce qui est du DBCombobox j'arrive pas à le charger malgrés l'aide de DELPHI pouvez -vous me guider

  7. #7
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 029
    Par défaut
    Citation Envoyé par aguina Voir le message
    j'ai exploré le controle Tstringlist mais j'avoue que c'est pas vraiment ce que je cherche bref si j'ai bien regardé ca ne resoud pas mon problème. et pour ce qui est du DBCombobox j'arrive pas à le charger malgrés l'aide de DELPHI pouvez -vous me guider
    Le controle TStringList ? Je suppose que tu veux parler de l'Objet TStringList

    En fait la manoeuvre est assez simple.
    Supposons que tu veuille supprimer un enregistrement de ta liste.
    1) Tu récupère l'index de l'item dans la liste
    2) Tu retire l'item de la liste
    3) Tu retire l'item de la StringList grâce à l'index

    Tu peux mêmre supprimer un enregistrement avec son contenu de la manière suivante (l'aide de Delphi est très bien faite)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with ListBox1.Items do
    begin
      BIndex := IndexOf('bureaucratie');  
      if BIndex > -1 then 
       Delete(BIndex);
    end;
    De plus toute sorte de manipulations sont déjà implémentée dans le TStringList, comme le tri ou le déplacement.
    Encore plus fort tu peux associer un objet à chaque élément de ta StringList via la propriété Objects.

    Je persiste à croire que la StringList est ce qu'il te faut

  8. #8
    Membre averti
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut je m'explique
    Merci déjà pour votre attention.
    En fait tient d’abord à repréciser mon problème. En fait, je gérer des enregistrements père/fils (Région / département). Donc dans mon formulaire de département je veux charger dans un Combobox le code et le libellé du département pour à l’enregistrement sauvegarder le code de la région. Ce serait aisé en l’état actuel de charger les combobox avec le code de la région mais ce sont des entiers donc insignifiant pour l’utilisateur par rapport aux libellés.La solution à ce problème pour moi c’est un Combobox pouvant afficher plusieurs colonnes.


    Je le faisais déjà avec VB6 avec la DLL FM20.dll de Microsoft Forms 2.0 Object Library comment pourrais-je importer cela dans delphi 7.

  9. #9
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 029
    Par défaut
    j'affiche le libelé et je cache le code de l'enregistrement
    La solution à ce problème pour moi c’est un Combobox pouvant afficher plusieurs colonnes
    Faudrait savoir si tu veux l'afficher ou le masquer !

    Après si tu veux afficher code et le nom du département il suffit de les combiner dans la combo box et de laisser juste le code dans la stringList

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaListBoxDepartement.items.add('(01) Ain')
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaStringListDepartement.items.add('01')
    Ou encore tu peux associer l'item à un élément de la stringList
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaStringListDepartement.items.addObject('01',MaListBoxDepartement.items[0])

  10. #10
    Membre averti
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut c'est celà que je veux éviter
    tout d'abord je tient à recadrer le PB je veux afficher le libellé tout en cachant le code et par la suite manipuler le code qui est l'identifiant/clé primaire. la solution stringlist 'cest bien mais pas optimal. car imaginez vous je dois éffectuer des simulations sur une table de près de 30 000 enregistrements(au bas mot) charger à la fois le combobox et la stringlist le temps d'attente!
    une autre solution aurait été de synchroniser 2 comboboxs (code et libellé) ou de concatener les champs mais c'est c'est cette gymnastique que je veux éviter.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Par défaut
    Salut,

    En fait tu veux pouvoir afficher certaines infos et enregistrer un code lié à cette info:
    Ex:
    Avec une base de donnée de pays, dans laquelle tu aurais un champ PAYS et un champ CODE et tu voudrais afficher à l'utilisateur le pays mais quand tu enregistres c'est le code qui lui est attaché qui doit être enregistré, enfin si j'ai bien compris

    Pq ne pas utiliser une DBLookupComboBox, tu remplis dans ListField les champs que tu veux afficher séparé par un ; et dans KeyField le champ que tu vas utiliser pour enregistrer la valeur attaché au Pays

  12. #12
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    oui tout à fais ça un DBLookUpCompboBox, c'est la solution idéale à ton problème.

  13. #13
    Membre averti
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut voila ce que je fais
    merci pour cette intervention
    en fait j'ai exploré cette solution mais je suis bloqué au niveau du chargement du DBLOOKUPcombobox malgrés tous les explications du FAQ delphi.
    - Je connecte mon objet ADOdataset1 à ma source de données je paramàtre
    - Dans le DBLOOKUPcombobox il n'ya pas d'element dans la liste DATAsource ou Listsource
    - j'ajoute un composant DATAsource1 ou dataset = datasource1
    - dans DBLOOCKUPcombobox
    Datasource = datasource1
    Listsource = datasource1
    listField = champ1
    keyfield = champ2
    datafield = champ1
    mais à l'execution le composant reste vide et inactif

    me suis je bien pris??

Discussions similaires

  1. Renseigner des ListBox/ComboBox multi-colonnes - Récupérer la sélection
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/09/2007, 14h42
  2. [VB.NET]ComboBox Multi-Colonnes
    Par Golzinne dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/03/2006, 19h55
  3. Affichage ComboBox multi-colonnes
    Par dough29 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 04/12/2005, 13h28

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