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 :

remplir un combobox


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 59
    Points : 31
    Points
    31
    Par défaut remplir un combobox
    Bonjour à tous !

    Bon voilà, ça fait plusieurs heures que j'essaie de remplir une combobox avec un valuemember et un displaymember. Etant plutot adepte du vb.net, j'ai un peu de mal en c#.

    Voici mon code :

    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
     private void Frmlienclasse_Load(object sender, EventArgs e)
            {
               try
                {
                    connexion.ConnectionString = "Data Source=Baptiste-PC;Initial Catalog=GestionNotes;User=sa;Password=info";
                    connexion.Open();
                    string strRequete;
                    strRequete = "Exec afficherclasse";
                    SqlCommand pCommand = new SqlCommand(strRequete, connexion);
                    SqlDataReader pMyExecut = default(SqlDataReader);
                    pMyExecut = pCommand.ExecuteReader();
                    while (pMyExecut.Read())
                    {
                        //CBclasse.DataSource = ;
                        CBclasse.ValueMember = pMyExecut[0].ToString();
                        CBclasse.DisplayMember = pMyExecut[2].ToString();
                    }
                    pMyExecut.Close();
                    connexion.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Echec du chargement " + ex.Message);
                    connexion.Close();
                }
            }
    En me baladant sur plusieurs lien sur internet, j'ai compris qu'il fallait un datasource contenant les données de ma table. Mais je n'arrive pas à mettre en pratique celà.

    Pouvez-vous me donner un petit coup de main ?

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Points : 268
    Points
    268
    Par défaut
    A ta place je ferais un truc du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    **Ta connexion**
    SqlDataAdapter DTA = new SqlDataAdapter("Ta requete", Ta connexion);
    DataTable DTT = new DataTable();
    DTA.Fill(DTT);
    foreach(DataRow in DTT.Rows)
    {
           ComboBoxItem item = new ComboBoxItem();
           item.Text = DTT["nom de ta colonne"];
           item.Value = DTT["nom de ta colonne"];
           TaComboBox.Items.Add(item);
    }
    Il faut peut-être bidouiller si ca marche pas, j'ai pas vérifié mais à priori c'est la bonne méthode si je dis pas de bêtise

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SqlDataAdapter DTA = new SqlDataAdapter("Exec afficherclasse", connexion);
                    DataTable DTT = new DataTable();
                    DTA.Fill(DTT);
                    foreach(DataRow in DTT.Rows)
                    {
                           ComboBoxItem item = new ComboBoxItem();
                           item.Text = DTT["nom_classe"];
                           item.Value = DTT["id_classe"];
                           CBclasse.Items.Add(item);
                    }
    En modifiant ton code, j'ai plusieurs erreurs =/
    Tout d'abord, il ne veut pas du ComboBoxItem. L'erreur me dit qu'il manque peut-etre une clause using.
    Ensuite, je ne peux appliquer l'indexation au niveau du DTT["nom_classe"] et l'autre.
    Et enfin, La méthode surchargée correspondant le mieux à 'System.Windows.Forms.ComboBox.ObjectCollection.Add(object)' possède des arguments non valide.

    =/

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Points : 268
    Points
    268
    Par défaut
    Oui en fait autant pour moi, j'utilise des contrôles Télérik avec lesquels ca passe nikel mais dans ton cas tu ne peux pas.

    Il te faut remplacer ton datareader par un datatable comme sur mon exemple et ensuite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TaCombo.DataSource = DTT;
    TaCombo.DisplayMember = nomdetacolonne
    TaCombo.ValueMembber = nomdetacolonne
    Pas besoin de while ni rien, tu remplis ton DataTable avec le DataAdapter et ca devrait marcher

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Il me jette pour le foreach (dataRow in DTT.Rows)
    Il me met
    Le type et l'identificateur sont tous deux requis dans une instruction foreach
    J'ai fait comme celà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SqlDataAdapter DTA = new SqlDataAdapter("Exec afficherclasse", connexion);
                    DataTable DTT = new DataTable();
                    DTA.Fill(DTT);
                    foreach (DataRow in DTT.Rows)
                    {
                        CBclasse.DataSource = DTT;
                        CBclasse.DisplayMember = DTT["nom_classe"];
                        CBclasse.ValueMember = DTT["id_classe"];
                    }
                    connexion.Close();

  6. #6
    Membre habitué Avatar de bibbi
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Essaye:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (DataRow dRow in DTT.Rows)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    L'erreur s'est décalé. Elle se trouve ici maintenant :

    Impossible d'appliquer l'indexation à l'aide de [] à une expression de type 'System.Data.DataTable'

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Points : 268
    Points
    268
    Par défaut
    essayes avec le numéro de ta colonne (démarre à partir de 0 pour un dataTable) sinon envoie le code su'il y a pour "Exec afficherclasse", ton Adapter me semble bizzare


    edit: en fait non, remplace DTT par l'alias de tes rows: dRow

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    En remplaçant DTT par l'alias dRow, j'ai l'erreur comme quoi il faut que je cast.

    Donc j'essai de caster mes deux champs en mettant (string) devant comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     CBclasse.DataSource = DTT;
                        CBclasse.DisplayMember = (string)dRow["nom_classe"];
                        CBclasse.ValueMember = (string)dRow["id_classe"];
    Mais il ne me détecte aucune valeur à la compilation, mais dès que je lance l'application, j'ai cette erreur là :

    Impossible d'effectuer un cast d'un objet de type system.int32 en type system.string

  10. #10
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Points : 268
    Points
    268
    Par défaut
    essayes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CBclasse.DataSource = DTT;
    CBclasse.DisplayMember = dRow["nom_classe"].ToString();
    CBclasse.ValueMember = int.Parse(dRow["id_classe"].ToString());
    Edit: Sauf si tu veux récupérer ta valeur sous forme de String, tu enlèves le int.Parse()

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Je préfère le garder en int, vu qu'en suite, je l'utilise en tant que telle !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int.Parse(dRow["id_classe"].ToString());
    Il me donne deux erreurs sur cette ligne là :

    La méthode surchargée correspondant le mieux à 'int.Parse(string)' possède des arguments non valides
    Argument '1'*: impossible de convertir de 'object' en 'string'
    =/

  12. #12
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Points : 268
    Points
    268
    Par défaut
    Ouaip, je viens de tester, en fait tu es obligé de récupérer ton id sous forme de String...
    Il te faudra le parser plus tard lors de la récupération
    essaie voir si ca marche, et sinon je te mettrais mon code de test qui fonctionn très bien

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    Hum.. En faisant ceci j'obtiens une erreur au lancement de l'application :

    Liaison au nouveau membre Display impossible. Nom du paramètre : newDIsplayMember
    Je vais peut-etre m'en sortir un jour ? ^^

  14. #14
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Points : 268
    Points
    268
    Par défaut
    Lol mais oui c'est tout con en fait mais je capte pas pourquoi on galère la dessus

    Tiens mon code de test qui fonctionne, j'ai repris ce que je t'avais dis au tout début, c'est plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SqlConnection conn = new SqlConnection();
                conn.ConnectionString = ConfigurationManager.ConnectionStrings["prodchimiquesConnectionString"].ConnectionString;
                conn.Open();
                SqlDataAdapter DTA = new SqlDataAdapter("SELECT Code_Famille, Nom_Famille FROM Famille_Produit", conn);
                DataTable DTT = new DataTable();
                DTA.Fill(DTT);
                foreach (DataRow DtR in DTT.Rows)
                {
                    ListItem item = new ListItem();
                    item.Text = DtR["Nom_Famille"].ToString();
                    item.Value = DtR["Code_Famille"].ToString();
     
                    DropDownList1.Items.Add(item);
                }

    Adapte le et dis moi

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    D'accord, je test ça !

  16. #16
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Points : 268
    Points
    268
    Par défaut
    Ca s'est ma chaine de connection de mon Web.config, je suppose que ta connection est aussi enregistrée dans ton Web.Config, alors mets juste son nom à la place. A moins que tu ne l'ai pas et que tu refasses ta connection à chaque fois que tu en as besoin c'est pas terrible mais bon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SqlConnection conn = new SqlConnection();
                conn.ConnectionString = ConfigurationManager.ConnectionStrings["prodchimiquesConnectionString"].ConnectionString;
                conn.Open();
                SqlDataAdapter DTA = new SqlDataAdapter("SELECT Code_Famille, Nom_Famille FROM Famille_Produit", conn);
    Pour cette partie, il s'agit donc de la connection et de la requête, tu dois donc modifier ca à ta sauce

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    bon, je l'ai adapté à mes besoins

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                    SqlDataAdapter DTA = new SqlDataAdapter("Exec afficherclasse", connexion);
                    DataTable DTT = new DataTable();
                    DTA.Fill(DTT);
                    foreach (DataRow DtR in DTT.Rows)
                    {
                        ComboBox item = new ComboBox();
                        item.DisplayMember = DtR[2].ToString();
                        item.ValueMember = DtR[0].ToString();
                        CBclasse.Items.Add(item);
                    }
    Mais le soucis, c'est que rien ne s'affiche dans ma combobox. Enfin, il prends bien en compte l'ajout des champs, mais à la place d'avoir du texte, c'est blanc.

  18. #18
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Points : 268
    Points
    268
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                   SqlDataAdapter DTA = new SqlDataAdapter("Exec afficherclasse", connexion);
                    DataTable DTT = new DataTable();
                    DTA.Fill(DTT);
                    foreach (DataRow DtR in DTT.Rows)
                    {
                        ListItem item = new ListItem();
                        item.Text = DtR[2].ToString();
                        item.Value = DtR[0].ToString();
                        CBclasse.Items.Add(item);
                    }
    Comme ceci

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 59
    Points : 31
    Points
    31
    Par défaut
    En mettant ListItem, on me dit que :

    Le type ou le nom d'espace de noms 'ListItem' est introuvable (une directive using ou une référence d'assembly est-elle manquante*?)
    C'est pour cela que j'avais mis ComboBox =/

  20. #20
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Points : 268
    Points
    268
    Par défaut
    Alors la je comprends pas.. montre ton code aspx pour voir.

    Dans ton .cs tu as bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Web.UI.WebControls

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [C#] Remplire un comboBox avec un fichier XML
    Par Roach dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/09/2005, 20h45
  2. Comment remplir un ComboBox avec le nom des feuilles Excel ?
    Par libracom dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 27/06/2005, 15h14
  3. [C#] Remplir une combobox avec le champs d'une table Access
    Par Damsou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2005, 15h31
  4. [VB.NET] Remplir une ComboBox avec une requete sql
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2005, 15h29
  5. Réponses: 2
    Dernier message: 26/07/2004, 13h34

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