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

C++Builder Discussion :

ComboBox utilisant Names et Values


Sujet :

C++Builder

  1. #1
    Membre �clair�
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Consultant technique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par d�faut ComboBox utilisant Names et Values
    Bonjour,

    J'ai essay� d'utiliser les names/values des TStrings * en suivants les instructions de la faq : http://cpp.developpez.com/faq/bcb/?p...glistclevaleur

    Avec le code suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Form7->ComboBox1->Items->Add(IBQueryDivers->FieldByName("Nom_de_la_societe")->AsString + Form7->ComboBox1->Items->NameValueSeparator + IBQueryDivers->FieldByName("Numero_de_client")->AsString);
    Et cela affiche "soci�t�=1" dans la combobox. Hors, je veux afficher "Soci�t�" et pouvoir rectrouver son ID par le Values.

    Une id�e?

    Merci

  2. #2
    Membre �clair�
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Consultant technique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par d�faut
    J'ai essay� le code suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Form7->ComboBox1->Items->Clear();
    int indextemp = Form7->ComboBox1->Items->Add("");
    Form7->ComboBox1->Items->Values[indextemp] = "0";
    for (int I = 0; I < IBQueryDivers->RecordCount; I++)
        {
        indextemp = Form7->ComboBox1->Items->Add(IBQueryDivers->FieldByName("Nom_de_la_societe")->AsString);
        Form7->ComboBox1->Items->Values[indextemp] = IBQueryDivers->FieldByName("Numero_de_client")->AsString;
        IBQueryDivers->Next();
        }
    Et cela me donne le r�sultat suivant :
    j'ai mis le contenu entre guillemet mais pour bien voir qu'il y a un champs vide. Ils n'apparaissent pas dans le TComboBox.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    ""
    "0=0"
    "société"
    "2=1"

  3. #3
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par d�faut
    Hello,

    La propri�t� Values de TStrings prend un AnsiString en argument.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    for (int I = 0; I < IBQueryDivers->RecordCount; I++)
        {
        AnsiString nomSociete = IBQueryDivers->FieldByName("Nom_de_la_societe")->AsString;
        Form7->ComboBox1->Items->Add(nomSociete);
        Form7->ComboBox1->Items->Values[nomSociete] = IBQueryDivers->FieldByName("Numero_de_client")->AsString;
        IBQueryDivers->Next();
        }
    Sinon sous Builder 2007, il y a ValueFromIndex:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    for (int I = 0; I < IBQueryDivers->RecordCount; I++)
        {
        indextemp = Form7->ComboBox1->Items->Add(IBQueryDivers->FieldByName("Nom_de_la_societe")->AsString);
        Form7->ComboBox1->Items->ValueFromIndex[indextemp] = IBQueryDivers->FieldByName("Numero_de_client")->AsString;
        IBQueryDivers->Next();
        }
    Si le but est de stocker le num�ro de client dans un coin, tu peux utiliser la propri�t� Objets de TStrings...

  4. #4
    Membre �clair�
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Consultant technique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par d�faut
    Merci

    Mais �a ne fonctionne pas. J'ai enlev� l'ajout de la ligne vide pour voir ce que donne la boucle.

    Avec le 1er code que tu proposes :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    "société"
    "société=1
    Et le 2�me :
    Je ne voulais pas utiliser d'objet juste pour stocker un chiffre alors qu'une fonctionne existe d�ja pour �a.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    for (int I = 0; I < IBQueryDivers->RecordCount; I++)
        {
        AnsiString nomSociete = IBQueryDivers->FieldByName("Nom_de_la_societe")->AsString;
        Form7->ComboBox1->Items->Add(nomSociete);
        Form7->ComboBox1->Items->Values[nomSociete] = (AnsiString)IBQueryDivers->FieldByName("Numero_de_client")->AsString;
        IBQueryDivers->Next();
        }
    Jai aussi essay� avec en les modifiant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    for (int I = 0; I < IBQueryDivers->RecordCount; I++)
        {
        indextemp = Form7->ComboBox1->Items->Add((AnsiString)IBQueryDivers->FieldByName("Nom_de_la_societe")->AsString);
        Form7->ComboBox1->Items->ValueFromIndex[indextemp] = (AnsiString)IBQueryDivers->FieldByName("Numero_de_client")->AsString;
        IBQueryDivers->Next();
        }

  5. #5
    Membre �clair�
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Consultant technique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par d�faut
    Petite pr�cision :
    J'ai fait du pas � pas sur le for et il passe une seule fois dans la boucle. Normal puisqu'il y a une seule soci�t� dans ma bdd de test.

  6. #6
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par d�faut
    ok, mea cupla, je n'avais pas test� le code !

    Pour la 1�re solution, faut virer ->Add():
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    for (int I = 0; I < IBQueryDivers->RecordCount; I++)
        {
        AnsiString nomSociete = IBQueryDivers->FieldByName("Nom_de_la_societe")->AsString;
        Form7->ComboBox1->Items->Values[nomSociete] = (AnsiString)IBQueryDivers->FieldByName("Numero_de_client")->AsString;
        IBQueryDivers->Next();
        }
    Pour la 2�me solution, qui n'apporte pas grand chose, pour que �a marche mieux: (utiliser Values et Names impose d'avoir le s�parateur '=')
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    indextemp = Form7->ComboBox1->Items->Add(nomSociete)->AsString + "=");
    Form7->ComboBox1->Items->ValueFromIndex[indextemp] = numeroClient;
    Sinon, pour les objets, c'est juste une mani�re d�tourn�e de stock� un ID entier:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    stringListe->Objects[i] = (TObject*)IDClient;
    IDClient = (int)stringListe->Objects[i];

  7. #7
    Membre �clair�
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Consultant technique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par d�faut
    La 1�re solution ne fonctionne toujours pas. J'obtiens :
    Pour la 2�me solution, je ne comprend pas la logique puisque indextemp est le num�ro retourn� par la fonction Add et tu veux lui attribuer un AnsiString? Et du coup obtenir exactement la m�me chose que pour la 1�re solution.

    En fait, le ComboBox n'a pas l'air de g�rer le couple Names/Values.

  8. #8
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par d�faut
    La 1�re solution correspond � ce que l'on est en droit d'attendre de Values/Names, mais en effet ce n'est peut-�tre pas de �a que tu as besoin !!

    Pour la 2�me solution, quand tu appelles ValueFromIndex, il va rechercher le n-�me �l�ment dans la liste en v�rifiant qu'il est bien de la forme "X=". Si le s�parateur = est absent, il te rajoute une ligne "=valeur"... cf le fichier source Classes.pas...

    Au final, tu vas peut-�tre te retrouver � utiliser Objects...

  9. #9
    Membre �clair�
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Consultant technique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par d�faut
    Effectivement, je n'avais pas compris les choses comme �a.

    Et tout fonctionne avec un objet.

    .h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    class TIndexPerso : public TObject
    {
    public:
            int index;
    };
    .cpp
    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
    21
    for (int i = 0; i < Form7->ComboBox1->Items->Count; i++)
        {
        if (Form7->ComboBox1->Items->Objects[i] != NULL)
           {
           delete Form7->ComboBox1->Items->Objects[i];
           }
        }
    Form7->ComboBox1->Items->Clear();
    TIndexPerso *indexpersovide = new TIndexPerso();
    indexpersovide->index = 0;
    int indextemp;
    Form7->ComboBox1->Items->Add("");
    Form7->ComboBox1->Items->Objects[0] = indexpersovide;
    for (int I = 0; I < IBQueryDivers->RecordCount; I++)
        {
        TIndexPerso *indexpersovide = new TIndexPerso();
        indexpersovide->index = IBQueryDivers->FieldByName("Numero_de_client")->AsInteger;
        indextemp = Form7->ComboBox1->Items->Add(IBQueryDivers->FieldByName("Nom_de_la_societe")->AsString);
        Form7->ComboBox1->Items->Objects[indextemp] = indexpersovide;
        IBQueryDivers->Next();
        }
    Et dans le OnClose de la Form :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    for (int i = 0; i < Form7->ComboBox1->Items->Count; i++)
        {
        if (Form7->ComboBox1->Items->Objects[i] != NULL)
           {
           delete Form7->ComboBox1->Items->Objects[i];
           }
        }
    Merci pour tout

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [RegEx] preg_match dans formulaire pour recup�rer les name et value
    Par natsou_k dans le forum Langage
    R�ponses: 6
    Dernier message: 19/04/2010, 20h52
  2. [SBI BIRT] Erreur de transformation quand Birt utilise Allow Multiples values
    Par atee dans le forum SpagoBI
    R�ponses: 1
    Dernier message: 23/04/2009, 17h09
  3. Remplir une comboBox avec name et id
    Par Phenomenium dans le forum Ext JS / Sencha
    R�ponses: 2
    Dernier message: 01/07/2008, 11h12
  4. Utilisation du Row Value Constructor
    Par Antoun dans le forum SQL
    R�ponses: 7
    Dernier message: 31/07/2007, 16h20
  5. [ACCESS] utilisation de Top Value
    Par Arko76 dans le forum Requ�tes et SQL.
    R�ponses: 3
    Dernier message: 30/03/2007, 19h33

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