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 :

Question sur : Combobox SelectedValue


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 43
    Points : 42
    Points
    42
    Par défaut Question sur : Combobox SelectedValue
    Vs2010 beta framework 3.5
    Niveau : Débutant.

    Bonjour à tous

    je test actuellement divers composants et je me trouve confronté a un phénomène inexplicable

    contexte : une form, 2 combos 'liées'
    Utilisation : l'utilisateur selectionne dans la 1er combo les editeur, la 2nd se remplit des publication suite au choix dans la 1er (rien d extraordinaire)

    Au démarrage j'alimente ma première Combo via un dataset.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public Form1()
            {
                InitializeComponent();
                DataSet ds = bll.SelectEditeur();
                cbx.DataSource = ds.Tables[0];
                cbx.DisplayMember = "Nom";
                cbx.ValueMember = "Id";
            }
    Sur l'event cbx_SelectedIndexChanged
    je recupere la value de la 1er combo comme paramètre pour la seconde requete et je remplis ma seconde combo via le resultat dans le second Dataset.

    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
     
    private void cbx_SelectedIndexChanged(object sender, EventArgs e)
            {
                 int index;
                System.Type t = cbx.SelectedValue.GetType();
                if (t.Name.ToString() == "Int32")
                {
                    index = int.Parse(cbx.SelectedValue.ToString());
                }
                else
                {
                    DataRowView SelectedRow = (DataRowView)cbx.SelectedValue;
                    index = int.Parse(SelectedRow[0].ToString());
                }
                DataSet ds = bll.SelectPublication(index);
                cb2.DataSource = ds.Tables[0];
                cb2.DisplayMember = "Titre";
                cb2.ValueMember = "Id";
         }
    Probleme : lors du lancement qd je recupere le selectedValue il est bien sous la forme d'un Datarowview, jusque la normal, mais a la premiere selection d'un Editeur le selectedvalue est de Type Int32 d'ou mon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     System.Type t = cbx.SelectedValue.GetType();
                if (t.Name.ToString() == "Int32")
                {
                      // Traitement
                }
    Alors effectivement ca fonctionne,mais pourquoi a l'initialisation il est de type Datarowview, et prq change t-il en Int32 d'un coup ?

    Autre remarque cette façon de coder me parait, comment dire, pas trés pro, pas trés propre que me conseillez vous ?


    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Points : 456
    Points
    456
    Par défaut
    car tu donnes le ValueMember et le DisplayMember après avoir donné la source de donnée.

    allimente tes combos dans cet ordre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cbx.DisplayMember = "Nom";
    cbx.ValueMember = "Id";
    cbx.DataSource = ds.Tables[0];

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 43
    Points : 42
    Points
    42
    Par défaut
    Ah ok, merci bien pour ta réponse.

    Mais je viens d'effectuer le changement et toujours pareil, il me renvoie un Int32.

    Bonne journée

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Surtout, t'as pas besoin d'affecter DisplayMember et ValueMember à chaque fois. Une seule fois, dans le constructeur (ou via le designer, qui le mettra dans InitializeComponents) par exemple.
    ಠ_ಠ

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Integer
    Bonjour,
    Il te renvoie un integer parce que ton "value member" est probablement un integer (n'est ce pas le cas du champ "ID" de ton dataset que tu utilises comme value member??).
    Le comportement anormal est plutôt a l'initialisation, lorsqu'il te renvoie un datarowview...

    pour éviter ce genre de pb tu peux utiliser l'event
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonControl_SelectionChangeCommitted
    tu auras juste à gérer la récupération de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonControl.selectedValue
    dans un integer...

    A plus

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 43
    Points : 42
    Points
    42
    Par défaut
    hello

    voila résolu merci a vous.
    j'ai choisi l'évènement que tu m'as indiqué
    et changé l'ordre d'affectation du dataset.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
               private void cbx_SelectionChangeCommitted(object sender, EventArgs e)
            {
                int index;
                index = int.Parse(cbx.SelectedValue.ToString());
                DataSet ds = bll.SelectPublication(index);
                cb2.DisplayMember = "Titre";
                cb2.ValueMember = "Id";
                cb2.DataSource = ds.Tables[0];
            }

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

Discussions similaires

  1. Question sur combobox
    Par zidane22 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 08/10/2013, 23h27
  2. Question sur les ComboBox
    Par Elwe31 dans le forum VB.NET
    Réponses: 2
    Dernier message: 21/02/2008, 09h51
  3. Question sur les combobox
    Par mitch99 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/06/2007, 16h37
  4. Question sur les comboBox
    Par gibea00 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 15/01/2007, 09h18
  5. une petite question sur les combobox
    Par kerkennah dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/01/2007, 06h59

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