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 :

[C#][ComboBox] Insertion et selection de valeur


Sujet :

Windows Forms

  1. #1
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut [C#][ComboBox] Insertion et selection de valeur
    Bonjour,
    Au chargement d'un form j'ai besoin de remplir un combobox avec des valeurs d'une BDD ayant 1 ID et 1 libellé.
    Au retour d'une requête j'obtiens une Id d'élément de ce combobox que j'aimerais alors sélectionner.
    J'ai vu qu'il y a la possibilité de sélectionner par la valeur du texte mais ça me semble hasardeux (espace, apostrophe etc...)
    J'aurais donc voulu au moment du remplissage de mon combobox, ajouter mes éléments avec un
    Combobox.Items.insert(<Id >, <libellé>)
    Malheureusement mes Id ne commencent pas forcement à 0 et dans ce cas, il refuse d’ajouter mes valeurs….
    Avez-vous une idée pour une autre solution ?

    Merci à vous

  2. #2
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    tu récupère les données de ta BDD Comment ? avec un DataSet ? Un Datareader ?

  3. #3
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Pardon, avec un DataReader
    Pour le moment je fais ça et je voulais faire une selection à partir du premier caractère mais je ne vois pas comment aire et je ne trouve pas très propre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    clRequete Requete = new clRequete("SELECT ID_TAS, TYPE FROM XC_TAS");
    SqlDataReader drListeTas = Requete.QueryRequete();
    while (drListeTas.Read())
    {
       cbTypeAssiette_CGP.Items.Add(drListeTas.GetDouble(0) + "- " + drListeTas.GetString(1));
    }
    cbTypeAssiette_CGP.SelectedIndex = 0;
    drListeTas.Close();
    J'aurais préféré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    clRequete Requete = new clRequete("SELECT ID_TAS, TYPE FROM XC_TAS");
    SqlDataReader drListeTas = Requete.QueryRequete();
    while (drListeTas.Read())
    {
       cbTypeAssiette_CGP.Items.Insert(Convert.ToInt32(drListeTas.GetDouble(0)), drListeTas.GetString(1));
    }
    cbTypeAssiette_CGP.SelectedIndex = 0;
    drListeTas.Close();

    P.S : merci pour la réponse si rapide !!!

  4. #4
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    Ce qui ne va pas dans ton code, c'est que tu utilise d'une mauvaise façon la méthode Insert(int index, object obj) de la class ListItem.
    Le premier paramètre (int index) correspond à l'odre d'apparition de l'éméent dans la liste déroulante.

    Quand tu ajoute des élements dans une liste déroulante de manière manuelle, tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cbTypeAssiette_CGP.Items.Add(drListeTas.GetDouble(0) + "- " + drListeTas.GetString(1));
    Auquel cas l'index est créé automatiquement

    Mais dans ton cas, je ferais plutot une alimentation automatique (binding) de telle façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clRequete Requete = new clRequete("SELECT ID_TAS, TYPE FROM XC_TAS");
    SqlDataReader drListeTas = Requete.QueryRequete();
     
    cbTypeAssiette_CGP.DataSource = drListeTas;
    cbTypeAssiette_CGP.DisplayMember = "TYPE";
    cbTypeAssiette_CGP.ValueMember = "ID_TAS";
    cbTypeAssiette_CGP.DataBind();
     
    drListeTas.Close();
     
    cbTypeAssiette_CGP.SelectedIndex = 0;

    Puis pour sélectionner un élément parmis la liste en fonction de son Id :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			int i=0;
    			foreach (object var in comboBox1.Items)
    			{
    				if (Convert.ToInt32(var) == 3)
    				{
    					comboBox1.SelectedIndex = i;
    					break;
    				}
    				i++;
    			}

  5. #5
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Merci pour cette méthode qui à l'air assez pratique.
    par contre il semble il y avoir plusieurs problèmes

    Premièrement il n'a pas de définition pour le DataBind() sur mon combobox.
    Ensuite en supprimant la ligne du databond, juste pour essayer, il semble ne aps apprécier le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SqlDataReader drListeTas = Requete.QueryRequete();
    cbTypeAssiette_CGP.DataSource = drListeTas;
    Le débogueur me répond : "DataBinding complexe accepte IList ou IListSource comme source de données."

    Enfin une petite dernière chose, dans la boucle for pour sélectionner la valeur,
    le object var in comboBox1.Items va représenter le ValueMember ??

    Merci beaucoup pour ton aide et tes explications.

  6. #6
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    Premièrement il n'a pas de définition pour le DataBind() sur mon combobox.
    Effectivement, j'ai confondu

    Le débogueur me répond : "DataBinding complexe accepte IList ou IListSource comme source de données."
    Ouai en fait me suis planté sur toute la ligne, dsl...
    Faut trouver aut'chose, je regarde de + près

  7. #7
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Lol pas de problème , c'est dommage je l'aimais bien cette solution, elle me paraissait toute belle

  8. #8
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    L'idée d'utiliser le DataSource me parait bien bonen tout de même mais il ne veut pas de mon DataReader comme cela, il faut lui mettre dans un iList apparement.
    Il y a-t-il un moyen de faire ça proprement ?

    J'essaye de m'aider de ce que je trouve dans ce document mais je n'arrive pas à adapter.

    Merci pour votre aide

  9. #9
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Purquoi ne pas simplement remplir un dataset avec la requete.
    Ensuite il n'y a plus qu'à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cbTypeAssiette_CGP.DataSource = dataset.Table["matable"];
    et d'indiquer les ValueMember et DisplayMember comme guitoux1 l'a indiqué précédemment.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  10. #10
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Je pensais pouvoir resté en mode connecter et éviter les DataSet, mais ça pourrait etre une idée si elle reste légère.

    Par contre je sais pas comment remplir un DataSet à partir de la requete

    Merci

  11. #11
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Pour le dataSource de ta combobox t'as deux possibilités : soit tu lui files un dataset (ou datatable), soit tu lui donnes une collection d'objets.

    Pour la collection d'objet il faut que tu crée une classe monObjet qui regroupera les propriétés id et libellé. Tu pourra utiliser le mode connecté :
    Tu crée une liste de monObjet (List<monObjet> maListe) et dans ta boucle while (drListeTas.Read()) tu crée un objet monObjet avec id et libellé et tu l'ajoute à la liste.


    A la fin tu fait datasource = maListe (en spécifiant toujours ValueMember et DisplayMember) et c'est tout.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  12. #12
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    C'est bon je crois avoir réussi.
    Je remplit mon combobox avec une DataTable.
    Ensuite je valide le DisplayMenber et le ValueMember.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //renvoi une table
    cbTypeAssiette_CGF.DataSource = GetTableListeFromDB(Requete); 
    cbTypeAssiette_CGF.DisplayMember = "TYPE";
    cbTypeAssiette_CGF.ValueMember = "ID_TAS";
    Ensuite pour selectionner le bon mambre je fais un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cbTypeAssiette_CGF.SelectedIndex = Convert.ToInt32(cTypeBareme.cpModeCalcul.dpTypeAssiette);
    Normalement ça fonctionne.

    Je teste un peu plus et si c'est bon je valide le sujet et je vous embrasse tout les 2 très très fort

  13. #13
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Ca fonctionne parfaitement, mais plutôt avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cbTypeAssiette_CGF.SelectedValue = Convert.ToInt32(cTypeBareme.cpModeCalcul.dpTypeAssiette);
    C'est parfait !!

    Merci beaucoup à vous 2

  14. #14
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Je reviens à la charge
    J'aimerais pour le DisplayMember de mon ComboBox, non pas avoir 1 seul élement mais la concatenation de 2.

    Par exemple ma Table sera composé des colonnes "NUMERO" et "LIBELLE" et je souhaiterais avoir comme valueMember :NUMERO
    et pour le DIsplayMember : "NUMERO -" + "LIBELLE"

    Mais évidement ça ne fonctionne pas

    Merci pour votre aide.

  15. #15
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    c'est pour ca qu'il existe dans certaines librairies (par exemple Janus) des multicombobox.
    Lorsque à l'affichage tu ne vois qu'une colonne (ca prend peu de place) en revanche si tu déroule ta combobox, tu peux avoir n colonnes ce qui est très pratique.

  16. #16
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    hum..ou sinon fallait passer par des classes. Tu créais une classe pour cette table avec une propriété public numetlibellé qui te renvoyait la concatenation du num et du libellé. Ensuite il suffisait d'indiquer cette propriété comme displayvalue.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  17. #17
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Hummm pas très cool le passage à une classe
    Ma DataSource venant d'une Table que je construit moi même (avec une méthode générique pour le moment), est ce que je ne pourrais pas avoir une méthode qui me renverrait une table dans laquelle j'aurrais déjà concaténé 2 colonnes ?
    Dans ce cas, comment faire cela ?


    Merci à vous.
    Extra la réactivité !!

  18. #18
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    ben

    select champs1 | ' ' | champs2 as champ_a_afficher
    ca te permet de traiter ca directement dans ta requete sql...

  19. #19
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Merci beaucoup, directement en sql c'est plus simple effectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID_BAR, rtrim(convert(char,ID_BAR)) +'- '+ INTITULE as LIBELLE FROM XC_BAR ORDER BY ID_BAR

  20. #20
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    sinon tu rajoutes toi meme une colonne à ta datatable en mettant dedans les 2 champs concaténés.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

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

Discussions similaires

  1. [MySQL] insert select avec valeur par défautl
    Par omelhor dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/07/2012, 19h26
  2. Réponses: 1
    Dernier message: 14/12/2009, 17h19
  3. insert int avec une valeur + un select
    Par polo86 dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/05/2009, 13h25
  4. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 18h32
  5. [Insert et Select de la même table]
    Par lucimast dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/01/2004, 15h53

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