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 :

Selectionne une ligne de la combo grace a sa valeur


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 32
    Par défaut Selectionne une ligne de la combo grace a sa valeur
    Bonjour a tous

    J'ai un petit probleme dans une application. J'ai une combobox qui est remplis avec le code une valeur et un texte et je renvoi que le texte dans ma combo (En adaptant le code vb.net fournis ici : http://cyrilhome.over-blog.net/article-10237868.html)

    j'ai donc un listitem qui recupere les valeur et les texte d'une base de donné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    req = "select * from article"; 
    commande = new SqlCommand(req, connexion);
    datareader = commande.ExecuteReader();
     
    while (datareader .Read())     
    {
       ListItem Liste = new ListItem(); 
       Liste.TextNom =  (datareader.GetString("NomArticle"));
       Liste.Value =  (datareader.GetString("Numero"));
       comboBox1.Items.Add(Liste);   
    }

    Jusque la tous fonctionne tres bien

    Mon probleme c'est quand je voudrais selectionner une ligne de ma combo box grace au Numero du Produit.
    Par exemple j'ai l'article 10 qui represente des meubles
    J'ai essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Combobox.SelectedItem = 10; 
    Combobox.SelectedValue = 10; 
    Combobox.SelectedIndex = 10;
    Je voudrais que Meuble sois selectionner dans ma combobox Mais aucun resultat n' a fonctionné

    Quelqu'un aurait une idée svp

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 196
    Par défaut
    Si j'ai bien compris, les items de ta combobox ce sont les numéro de produit, et quand tu en sélectionne un, dans la même combobox, tu veux afficher l'article?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 32
    Par défaut
    Oui, enfaite j'ai dans ma table article plusieurs ligne

    Numero | NomArticle
    ---------------------------
    1 | Chaise
    2 | Table
    3 | Escalier
    4 | Bibliotheque
    5 | Tabouret
    6 | Bar
    7 | Buffet
    8 | Lit
    9 | Table de nuit
    10 | Meuble
    .....

    Donc quand je regarde dans ma combo, on vois que les nom des article mais quand je recupere la valeur d'une ligne sa me retour bien le numero de l'article.

    La ce que je voudrais, par exemple, c'est que par defaut ce sois les meuble qui soit selectionner.

    J'espere etre asser claire

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    la numérotation commençant à 1 et non à 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Combobox.SelectedIndex = 10 -1 ;

  5. #5
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour Linconnu
    Corrige ton code comme il se doit car combo doit connaitre 2 choses:
    - DisplayMember (la prop affiche à l'user)
    - ValueMember : sur clic ou selection la prop qui servira pour le traitement dans la ligne actuelle.
    Il faut revoir ton class Data et la definition d'un list< T >......
    code 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WinCombox
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
     
            }
     
     
            private void Form1_Load(object sender, EventArgs e)
            {
                string[,] arData = new string[,]
                {
                    {"1" , "Chaise"} ,
                    { "2" , "Table"},
                    { "3" , "Escalier"},
                    {  "4" , "Bibliotheque" }, 
                    { "5" , "Tabouret"} , 
                    {  "6" , "Bar"} ,
                    {  "7", "Buffet"},
                    {  "8" , "Lit"} ,  
                    {  "9" , "Table de nuit"},
                    { "10" , "Meuble" } 
                };
     
     
     
                List<DataItem> Liste = new List<DataItem>();
                DataItem myDataItem;
                for (int i = 0; i < arData.GetLength(0); i++)
                {
                    myDataItem = new DataItem();
                    myDataItem.TextNom = arData[i, 1];
                    myDataItem.Value = arData[i, 0];
                    /* add to your list */
                    Liste.Add(myDataItem);
     
                }
                /* la liste est pleine */
                /* on la binde à combo en precisant DisplayMember & ValueMember....  */
                comboBox1.BeginUpdate();
                comboBox1.DataSource = Liste;
                comboBox1.DisplayMember = "TextNom";
                comboBox1.ValueMember = "Value";
                comboBox1.EndUpdate(); 
            }
     
            private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
            {
                if (comboBox1.SelectedIndex ==-1) return;
                this.textBox1.Text="vous avez selectione : " + ((DataItem)comboBox1.SelectedItem).TextNom+ Environment.NewLine;
                this.textBox1.Text = this.textBox1.Text + "numero :" + comboBox1.SelectedValue;
            }
     
     
        }
     
        public class DataItem
        {
            public string TextNom { get; set; }
            public string Value { get; set; }
     
        }
     
     
    }
    ton code revu:
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WinCombox
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
            private void Form2_Load(object sender, EventArgs e)
            {
                req = "select * from article";
                commande = new SqlCommand(req, connexion);
                datareader = commande.ExecuteReader();
     
                /* ta liste qu'il ne faut confondre avec....  */
                List<DataItem> Liste = new List<DataItem>();
     
                /* ta class "data"....  */
                DataItem myDataItem;
     
                while (datareader.Read())
                {
                    myDataItem = new DataItem();
                    myDataItem.TextNom = (datareader.GetString("NomArticle"));
                    myDataItem.Value = (datareader.GetString("Numero"));
                    Liste.Add(myDataItem);
                }
                ///* sort le combo du  while */
                ///* la liste est pleine on la binde à combo en precisant DisplayMember & ValueMember....  */
                comboBox1.DataSource = Liste;
                comboBox1.DisplayMember = "TextNom";
                comboBox1.ValueMember = "Value";
            }
     
     
     
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (comboBox1.SelectedIndex == -1) return;
                this.textBox1.Text = "vous avez selectione : " + ((DataItem)comboBox1.SelectedItem).TextNom + Environment.NewLine;
                this.textBox1.Text = this.textBox1.Text + "numero :" + comboBox1.SelectedValue;
            }
     
     
     
        }
    }
    bon code....................

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 32
    Par défaut
    Bonjour et merci pour tes informations.

    J'ai essayer de mettre tes conseilles en application mais j'ai un probleme sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDataItem.Value = (datareader.GetString("Numero"));
    Elle me retourne cette erreur :
    Liaison au nouveau membre display impossible. Nom du parametre : newDisplayMember
    Aurait tu une idée de ce qui provoque cette erreur stp

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 32
    Par défaut +1 Selectionner un item grave a sa valeur
    Bonsoir a tous

    Je me permet de faire remonter ce poste parce que je me retrouve avec exactement le meme probleme que je n'arrive toujours pas a resoudre et cette fois ci je ne trouve pas non plus d'autre solution

    Quelqu'un aurait il une piste svp

    Je vous remercie

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 32
    Par défaut
    Merci pour votre réponse,

    en effet une erreur de programmation de ma part ete a l'origine du message d'erreur que j'avais.

    Cependant je n'arrive toujours pas même avec le code fournis a choisir qu'elle element de ma listbox sera selectionné par defaut.


    Je voudrais (par exemple) que au chargement de ma page, je remplie ma combobox 1 et choisir que l'item Meuble ayan la valeur = 10 sois selectionné.

    J'ai bien essayer les combobox.selectedvalue = 10 ... mais en debug je vois bien que ces valeur sont toujours considere null.

    Avez vous une idée ? svp

  9. #9
    Membre chevronné Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Par défaut
    Ouep essaye cà
    comboBox1.SelectedIndex = 9;

    D'ailleurs t'avais la solution un peu plus haut

    Citation Envoyé par Graffito Voir le message
    la numérotation commençant à 1 et non à 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Combobox.SelectedIndex = 10 -1 ;

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 32
    Par défaut
    Oui mais cete solution me permet de selectionné mon item grâce a son index alors que moi je voudrais le selectionné grâce a la value

    Enfaite je vais charger toute une table (par exemple ma table Produit) dans une combo box je veux que Id du produit sois la valeur et que le nom du produit sois le text qui sera visible dans ma combo box

    Donc je sais pas exactement combien y aura d'item dans ma combo et je sais pas en avance l'id de chaque produit

    je voudrais par defaut faire :

    combobox.selectedValue = 10; (et que sa me selectionne le produit qui a comme Id 10 même si il se trouve a l'index 45 )

  11. #11
    Membre chevronné Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Par défaut
    T'as plusieurs solution pour faire çà, soit c'est au chargement que c'est conditionné, donc là t'as accès à l'index.
    Ou bien après coup, il faut tout d'abord que tu surcharge la méthode Equals de DataItem
    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
     
    public class DataItem
        {
            public string TextNom { get; set; }
            public string Value { get; set; }
     
            public override bool Equals(object obj)
            {
                if (obj is DataItem)
                {
                    DataItem compare = (DataItem)obj;
                    return (TextNom.Equals(compare.TextNom) && Value.Equals(compare.Value));
                }
                return false;
     
            }
     
        }
    Attention au NullPointer, j'ai pas fais de test dans ce sens dans la méthode Equals, elle est à compléter pour la sécuriser

    et ensuite tu n'as plus qu'à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    comboBox1.SelectedItem = new DataItem() { TextNom = "Meuble", Value = "10" };
    Si tu ne connais jamais la valeur de "Value", tu peux adapter ta méthode Equals.

    Ou sinon tu peux garder en mémoire ta liste de DataItem et travailler avec elle, ou tout autre objet d'ailleurs que tu manipule, ta combo est bindé avec la liste, donc peut importe de que c'est.

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 32
    Par défaut
    Super merci pour ta reponse en effet sa fonction plus qu'a modifier toute mes listitem en DataItem pour pouvoir utiliser ta méthode a moins que jpuisse l'adapter a mon listitem ?

    En tous cas merci

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

Discussions similaires

  1. [VB.net] selectionner une ligne DataGrid
    Par MichMich29 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 31/05/2007, 20h36
  2. [FLASH 8] Selectionner une ligne dans une List
    Par Bb_TiTi dans le forum Flash
    Réponses: 1
    Dernier message: 02/01/2006, 17h47
  3. selectionner une ligne au hasard dans une table
    Par dark_vidor dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/06/2005, 12h01
  4. Réponses: 6
    Dernier message: 24/01/2005, 11h06
  5. [JEditorPane]Selectionner une ligne
    Par )3lade dans le forum Composants
    Réponses: 8
    Dernier message: 20/01/2004, 10h29

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