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# Discussion :

preselectionner une valeur dans un combobox lié à une source de données


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut preselectionner une valeur dans un combobox lié à une source de données
    j'ai un combobox que j'ai lié par le design à une source de données (une table dans une BD sql Server)
    Ce que je souhaite est d'avoir une valeur qui soit sélectionnée au chargement de ma fenêtre.
    comboBox1.SelectedValue=id; --> ne me donne rien
    rq:id correspond à value member dans le databinding

  2. #2
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Salut,
    Normalement, si tu fais le chargement de la combo avant le show de la form celà doit pouvoir marcher.....Montre le code

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut Bouts de code
    Merci pour ta réponse fally!
    Voici mon code initial qui n'avait aucun effet sur selected value

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //variables
    private Lecteur lecteur;
    private int idSite;
     
    //constructeur
    public Form_Changer_Site (Lecteur lecteur)
            {
                InitializeComponent();//complètement gérée par le designer
                this.lecteur = lecteur;
                comboBoxSites.SelectedValue=lecteur.idSite ;
     
            }

    Normalement, si tu fais le chargement de la combo avant le show de la form celà doit pouvoir marcher
    j'ai essayé de changer le code en séparant l'initialisation du comboBox de la méthode InitializeComponent();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //variables
    private Lecteur lecteur;
    private int idSite;
     
    //constructeur
    public Form_Changer_Site (Lecteur lecteur)
            {
                this.lecteur = lecteur;
                initialiZeCombo();
                comboBoxSites.SelectedValue = this.lecteur.idSite;
                InitializeComponent();
                this.lecteur = lecteur;
                comboBoxSites.SelectedValue=lecteur.idSite ;            
            }
    la methode initialiZeCombo()
    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
    //j'ai réalisé cette méthode en faisant du couper/coller des parties de code 
    //qui concerne le comboBox à partir du InitializeComponent()
    private void initialiZeCombo()
            {
                this.components = new System.ComponentModel.Container();
                this.comboBoxSites = new System.Windows.Forms.ComboBox();
     
                //initialisation des composants connexion base de données
                //...
                //...
     
                // 
                // comboBoxSites
                // 
                this.comboBoxSites.DataSource = this.siteBindingSource;
                this.comboBoxSites.DisplayMember = "nom_site";
                this.comboBoxSites.FormattingEnabled = true;
                this.comboBoxSites.Location = new System.Drawing.Point(105, 118);
                this.comboBoxSites.Name = "comboBoxSites";
                this.comboBoxSites.Size = new System.Drawing.Size(121, 21);
                this.comboBoxSites.TabIndex = 2;
                this.comboBoxSites.ValueMember = "id_site";
                this.comboBoxSites.SelectionChangeCommitted += new System.EventHandler(this.comboBoxSites_SelectionChangeCommitted);
            }
    même avec ceci aucun effet sur selected value.
    je me demande si je n'ai pas loupé qlq chose en faisant la liaison des données:
    this.comboBoxSites.DisplayMember = "nom_site";
    this.comboBoxSites.ValueMember = "id_site";

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut ??
    en faisant des test sur comboBox1.Items dans plusieurs endroits avec ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach (object o in comboBox1.Items)
                {
                    DataRowView drv = (DataRowView)o ;//car mes items sont de type DataRowView
                    label3.Text = label3.Text + drv.Row[0].ToString()+"  "+drv.Row[1].ToString()+"\n";
                }
    j'ai constaté que je ne peux afficher la liste des items qu'au niveau de form.load (impossible au niveau du constructeur!)
    quelqu'un sait à quel moment la liste des items du combobox est remplie (quand il est liée à une datasource)?
    y a t-il un code qui s'exécute entre l'appel du constructeur d'une Form et sa méthode load

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut peut être une solution
    j'ai constaté que je ne peux afficher la liste des items qu'au niveau de form.load (impossible au niveau du constructeur!)
    après ce constat et après plusieurs essais j'ai ce je veux.
    mais je ne sais pas si c'est la meilleure solution mais je la poste peut être elle sera utile pour quelqu'un d'autre.

    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
    private void Form_Changer_Site_Load(object sender, EventArgs e)
            {
                //pour présélectionner un item du comboBox je parcours la liste des items 
                //et je teste s'il s'agit de celui que je veux selectionner.
                //si oui, j'affecte cet item à la propriété selectedItem              
     
                Int64 id = (Int64)lecteur.idSite;//la valeur que je veux sélectionner
                foreach (object o in comboBoxSites.Items)
                {
                    DataRowView drv = (DataRowView)o;//o item courant
                    Int64 iddr = (Int64)drv.Row[0];//recupère l'id dd l'item courant
                    if (iddr==id)
                    {
                        comboBoxSites.SelectedItem = o;
                        break;
                    }
     
                }
                label1.Text = comboBoxSites.SelectedValue.ToString();//pour s'assurer que ça a bien marché
     
     
            }
    Vos suggestions pour amélioration sont vraiment les bienvenues car je ne suis pas tout à fait satisfaite de cette solution
    aussi, je m'nterroge toujours à ce propos:
    quelqu'un sait à quel moment la liste des items du combobox est remplie (quand il est liée à une datasource)?
    y a t-il un code qui s'exécute entre l'appel du constructeur d'une Form et sa méthode load

  6. #6
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Avec quelles données charges-tu ta combo? Si c'est d'une base de donées, tu écris une méthode qui se charge de "charger" ta combo et dans cette méthode tu spécifies la SelectedValue et la ValueMember de ta combo.
    Tu appelles cette méthode dans le constructeur de ta form et paf au chargement de ta form tu verras ta combo bien remplie

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par fally Voir le message
    Avec quelles données charges-tu ta combo? Si c'est d'une base de donées, tu écris une méthode qui se charge de "charger" ta combo et dans cette méthode tu spécifies la SelectedValue et la ValueMember de ta combo.
    Tu appelles cette méthode dans le constructeur de ta form et paf au chargement de ta form tu verras ta combo bien remplie
    comment spécifier cette valeur (SelectedValue )??? je désigne la ligne de la table, la clé ou quoi?
    nb:ma combo est effectivement liée à une base de données

  8. #8
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Citation Envoyé par missokhay Voir le message
    comment spécifier cette valeur (SelectedValue )??? je désigne la ligne de la table, la clé ou quoi?
    nb:ma combo est effectivement liée à une base de données
    Voici un bour de code pour t'expliquer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    string requete = "select clé,champ1 from Matable";
    ....
    Combo.ValueMember = "clé";
    Combo.DisplayMember = "champ1";
    Combo.SelectedValue = "maClé"; // maClé est la clé de la valeur "champ1" sur laquelle tu veux positionner ta combo au chargement de la forme

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    j'ai essayé et ça ne marche toujours pas. j'ai le sentiment que c'est un problème de compatibilité de type mais l'exécution ne déclenche aucune exception et ne mentionne aucune erreur. j'ai juste mon combo qui est bien rempli mais aucune valeur selectionnée!
    peut être vous pourriez plus m'aider avec ces détails
    ma table (dans la BD sous sql server) possède ces deux champs:
    id_site (bigint)
    nom_site (varchar(50))
    je lie le combo de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private void initialiZeCombo(int idSite)
            {
                //...
                comboBoxSites.DataSource = this.siteBindingSource;
                comboBoxSites.DisplayMember ="nom_site";
                comboBoxSites.ValueMember = "id_site";
                comboBoxSites.SelectedValue = idSite;
            }

  10. #10
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Ok! tu dois alors appeler ta méthode "initialiZeCombo" dans le constructeur de ta form (ou au load) et lui passer la valeur idSite qu'il faut. De plus il faut que ta idSite existe dans la base pour que la combo puisse afficher le nom_site qu'il faut.
    PS: es-tu en winforms?
    tu charges ta combo en faisant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboBoxSites.DataSource = this.siteBindingSource;
    ?
    je comprends pas bien celà

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    es-tu en winforms?
    oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboBoxSites.DataSource = this.siteBindingSource;
    c'est parce que j'utilise un dataset pour importer mes tables
    et le BindingSource siteBindingSource me permet de lier le combo à la table site

    ces deux lignes suffisent pour specifier le BindingSource
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                this.siteBindingSource.DataMember = "site";
                this.siteBindingSource.DataSource = this.controleDataSet1;//controleDataSet1 contient toutes les tables dont j'ai besoin

  12. #12
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut merci
    PS:
    j'apprécie énormément ton aide!

  13. #13
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Ok! mais moi je suis habitué à charger mes combo et data en utilisant des requêtes, des datasets et des dataviews
    celà marche-t-il actuellement comme tu le désires?

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

Discussions similaires

  1. [XL-2000] Remplir une valeur dans cellule à partir d'une valeur precise d'un fichier texte
    Par cactus666 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/01/2010, 10h31
  2. Vérifier l'existence d'une valeur dans un ComboBox
    Par logiciel_const dans le forum Composants VCL
    Réponses: 6
    Dernier message: 08/03/2008, 09h07
  3. [VB2008E] Où stocker une valeur dans les items d'une combobox ?
    Par dsolheid dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/01/2008, 19h14
  4. Récupérer une valeur dans un champ d'une autre table
    Par Kareg dans le forum Modélisation
    Réponses: 15
    Dernier message: 24/10/2007, 14h16
  5. [ComboBox] Retourner une valeur différente de ComboBox.Text
    Par nicolas.pied dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/02/2007, 20h01

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