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

Windows Forms Discussion :

[ComboBox] Retourner une valeur différente de ComboBox.Text


Sujet :

Windows Forms

  1. #1
    Membre actif
    Avatar de nicolas.pied
    Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Janvier 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes

    Informations forums :
    Inscription : Janvier 2005
    Messages : 249
    Points : 235
    Points
    235
    Par défaut [ComboBox] Retourner une valeur différente de ComboBox.Text
    Bonjour,

    Existe-t-il un moyen en C# au niveau d'un ComboBox pour afficher des valeurs et en récupérer d'autres ? Par exemple, afficher les valeurs d'une colonne "name" issue d'un DataSet et de retourner la valeur correspondante de la colonne "id" ; un peu comme en HTML en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <select>
    <option value="1">ma string</option>
    ...
    </select>
    Merci.

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Je ne suis pas sur d'avoir compris ton problème, mais je vais me hasarder à penser que tu fais allusion à la propriété Tag.
    C'est un attribut de type Object présent dans tous les userControls et qui sert comme espace de stockage de n'importe quoi (vu que c'est un Object) pour le programmeur.
    Ainsi, tu peux avoir le champ Text d'un comboBox mis à "XXXXX" et mettre "1" par exemple dans le champ Tag de comboBox.

    Si je me trompes, peux tu nous fournir plus de détails ?

  3. #3
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 82
    Points : 92
    Points
    92
    Par défaut
    Bonjour je crois qu'il fait plutot allusion à la propriété value.

    prenons le jeu d'essai suivant :
    ID Libellé
    ------- --------
    1 Libellé 1
    2 Libellé 2
    ............................

    En fait tu veux retourner l'ID soit "1" et non la propriété Text ("Libellé 1").

    Si tel est le cas il faut que tu utilises le code suivant en c#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cbo.SelectedItem.Value ;

  4. #4
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Une meilleure réponse serait de dire comment on ajoute une paire clé/valeur à un combobox
    Parce que quand on regarde le composant ComboBox mais surtout la fonction Add de la propriété Items, il faut fournir en paramètre un object pour ajouter un item supplémentaire.

    La solution est donc de créer une classe qui contient 2 champs
    • Un champ représentant la valeur à afficher
    • Et l'autre champ représentant la valeur cachée
    Exemple :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
     
            comboBox1.Items.Add(new MaClasse("Text1", 1));
            comboBox1.Items.Add(new MaClasse("Text2", 2));
            comboBox1.Items.Add(new MaClasse("Text3", 3));
            comboBox1.Items.Add(new MaClasse("Text4", 4));
            comboBox1.Items.Add(new MaClasse("Text5", 5));
        }
    }
    class MaClasse
    {
        private String ValeurAAfficher;
        private int ValeurARetourner;
     
        public MaClasse(String paramText, int paramValeur)
        {
            ValeurAAfficher = paramText;
            ValeurARetourner = paramValeur;
        }
     
        public String Texte
        {
            get { return ValeurAAfficher; }
        }
     
        public int Valeur
        {
            get { return ValeurARetourner; }
        }
    }
    Seul petit soucis... Comment le combobox va-t-il savoir que Texte est le champ à afficher et Valeur est la valeur à retourner ?
    En fait, il affichera juste le type de l'objet passé en paramètre si on ne spécifie rien.

    Donc pour dire que tel champ doit être utilisé pour être affiché et tel autre pour retourner en valeur, il faut initialiser les 2 propriétés DisplayMember et ValueMember du combobox (soit via l'interface, soit directement dans le code). Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    comboBox1.DisplayMember = "Texte";
    comboBox1.ValueMember = "Valeur";
    Par contre, le soucis est que quand j'utilise comboxBox1.SelectedValue... Je récupère tout le temps null... Si quelqu'un a la réponse, ça m'intéresse...

    Par contre, rien ne t'empêche d'utiliser SelectedItem et donc récupérer ton objet MaClasse.

  5. #5
    Membre actif
    Avatar de nicolas.pied
    Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Janvier 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes

    Informations forums :
    Inscription : Janvier 2005
    Messages : 249
    Points : 235
    Points
    235
    Par défaut
    Comme je vous l'avais spécifié, j'utilise un DataSet comme source de données. Ainsi, je procède de la façon suivante (après vos indications bien sûr ) et tout fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    comboBox.DataSource = dataSet.Tables["TTown"];
    comboBox.DisplayMember = "townName";
    comboBox.ValueMember = "id";
    Avec townName et id deux colonnes résultants de ma requête SQL. Je récupère ensuite la valeur id par comboBox.selectedValue.

    Par contre, le soucis est que quand j'utilise comboxBox1.SelectedValue... Je récupère tout le temps null... Si quelqu'un a la réponse, ça m'intéresse...
    Peut-être faut-il que tu précise ton DataSource, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboBox1.DataSource = MaClasse;
    Enfin, ce n'est juste qu'une proposition sans garantie de fonctionnement

    Merci pour vos conseils et propositions !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/10/2008, 13h28
  2. Réponses: 12
    Dernier message: 22/04/2008, 12h55
  3. Tester si un combobox a une valeur nulle
    Par ludooo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/08/2007, 20h35
  4. Réponses: 2
    Dernier message: 06/08/2007, 18h04
  5. [Spring MVC] Stocker les valeurs d'un ComboBox ds une BD
    Par jamalmoundir dans le forum Spring Web
    Réponses: 1
    Dernier message: 11/07/2007, 18h09

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