Remplir un comboBox par une Arraylist

LoubnaML Messages postés 12 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 5 mai 2011 - 2 mai 2011 à 09:31
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 - 6 mai 2011 à 07:11
Bonjour
je suis besoin d'une méthode qui remplir le comboBox par une Arrayliste j'ai crée ma propre méthode :

class ClassProcesseur
{
private string NumInvent;


public ClassProcesseur(string NumInvent)
{
NumInvent = this.NumInvent;


}
public string _NumInvent
{
get { return NumInvent; }
set { NumInvent = value; }
}


void RemplirCmbUP()
{
string str = "select NumInventaire from Processeur";
SqlCommand cmd = new SqlCommand(str, con);
SqlDataReader rd;
cmbNumUP.DataSource = null;
try
{
con.Open();
rd = cmd.ExecuteReader();

ArrayList Processeur = new ArrayList();

while (rd.Read())
{
Processeur.Add(new ClassProcesseur(rd[0].ToString()));



}
rd.Close();
cmbNumUP.DataSource = Processeur;
cmbNumUP.DisplayMember = "_NumInvent";
cmbNumUP.ValueMember = "_NumInvent";

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
con.Close();
}
}
mais rien se passe

slvp quelqu'un peut m'aider



}

14 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
2 mai 2011 à 10:51
Salut,

ta ComboBox ne sait pas quel membre de l'objet afficher. Autant ça fonctionne avec un DataGridView, qui peut afficher plusieurs info pour un même objet, autant pour la ComboBox c'est pas jouable.

Un solution, remplacer :
Processeur.Add(new ClassProcesseur(rd[0].ToString()));

par :
Processeur.Add(rd[0].ToString());


Tu peux également gérer 2 ArrayLists, une pour tes obj, une pour les valeurs à lister dans ta ComboBox.

Tu pourrais également créer ta propre classe qui implémente IList pour obtenir un fonctionnement qui colle à ton besoin.
0
LoubnaML Messages postés 12 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 5 mai 2011
2 mai 2011 à 11:40
merciii bcp ,
0
LoubnaML Messages postés 12 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 5 mai 2011
2 mai 2011 à 11:53
la méthode est bien joué, mais si je peux, que lorsque je clic sur un item du combo un TextBox m'afffiche une information liée au info du ComBox
comment je peux le faire avec un code c#
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
2 mai 2011 à 12:07
Re,

il faut implémenter l'évènement OnSelectedIndexChanged de ta ComboBox (cet évènement est lancé lorsque l'utilisateur sélectionne une item dans la ComboBox). Il faut alors utiliser le membre ComboBox.SelectedValue pour obtenir le choix de l'utilisateur. ça pourrait donner un truc comac :
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
MessageBox.Show(comboBox1.SelectedValue.ToString());
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LoubnaML Messages postés 12 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 5 mai 2011
2 mai 2011 à 23:36
ce code me donne l'information lors de l'affichage du Message Box ,mais moi je suis besoin de l'afficher sur une TextBox je fais des éffores mais pas d'avance
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
3 mai 2011 à 08:29
Si t'arrives pas à assigner seul un TextBox.Text va falloir revoir tes bases
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 7
3 mai 2011 à 08:33
Salut,

Ton code te permettant de remplir la ComboBox est correcte, mais l'erreur vient de ta classe ClassProcesseur... Dans le constructeur tu as inversé l'affectation de la valeur de NumInvent !!!

il ne faut pas écrire :
public ClassProcesseur(string NumInvent)
{
    NumInvent = this.NumInvent;
}


Mais plutôt :
public ClassProcesseur(string NumInvent)
{
    this.NumInvent = NumInvent;
}


Et pour récupérer l'instance de ClassProcesseur lorsque la sélection change, tu n'as plus qu'à faire :
private void cmbNumUP_SelectedIndexChanged( object sender, EventArgs e )
{
    if( cmbNumUP.SelectedItem != null )
    {
        // Récupère le processeur sélectionné par l'utilisateur
        ClassProcesseur processeurSelectionne = (ClassProcesseur)cmbNumUP.SelectedItem;

        // Affiche le NumInvent du processeur
        MessageBox.Show( processeurSelectionne._NumInvent );
    }
}


Voilà, en espérant que ça t'aide...
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 7
3 mai 2011 à 08:35
Et donc, pour l'afficher dans un TextBox...

private void cmbNumUP_SelectedIndexChanged( object sender, EventArgs e )
{
    if( cmbNumUP.SelectedItem != null )
    {
        // Récupère le processeur sélectionné par l'utilisateur
        ClassProcesseur processeurSelectionne = (ClassProcesseur)cmbNumUP.SelectedItem;

        // Affiche le NumInvent du processeur
        tonTextBox.Text = processeurSelectionne._NumInvent;
    }
}
0
LoubnaML Messages postés 12 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 5 mai 2011
3 mai 2011 à 10:16
vous me donnée la méthode comment récupérer et afficher l'iformation séléctionnée au Combo ms moi je veux autre chose
j'ai trouver la méthode que je veux on utilise l'événment SelectedIndexChanged du combo:
private void cmbNumUP_SelectedIndexChanged(object sender, EventArgs e)
{
//MessageBox.Show(cmbNumUP.SelectedValue.ToString());
string str = "select * from Processeur where NumInventaire='" + cmbNumUP.SelectedValue + "'";
SqlCommand cmd = new SqlCommand(str, con);
SqlDataReader dr;
try
{
con.Open();
dr = cmd.ExecuteReader();
dr.Read();
txtdesignationUP.Text = dr["Designation"].ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);

}
finally
{
con.Close();
}
}



Mercii pour votre attention
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 7
3 mai 2011 à 10:36
Oui, mais dans ce cas, la classe ClassProcesseur ne sert à rien...
Et ce n'est pas très optimisé de refaire la requête à chaque changement de sélection !

Je te propose ceci, pour ClassProcesseur :
public class ClassProcesseur
{
    public readonly string NumInvent;
    public readonly string Designation;

    public ClassProcesseur( string numInvent, string designation )
    {
        this.NumInvent = numInvent;
        this.Designation = designation;
    }
}


Et dans ton formulaire :

public void RemplirCmbUP()
{
    List<ClassProcesseur> list = new List<ClassProcesseur>();

    string str = "SELECT NumInventaire, Designation FROM Processeur";
    SqlCommand cmd = new SqlCommand( str, con );
    try
    {
        con.Open();
        SqlDataReader rd = cmd.ExecuteReader();

        while( rd.Read() )
            list.Add( new ClassProcesseur( rd[ 0 ].ToString(), rd[ 1 ].ToString() ) );

        rd.Close();
    }
    catch( Exception ex )
    {
        MessageBox.Show( ex.Message );
    }
    finally
    {
        con.Close();
    }

    cmbNumUP.DataSource = list;
    cmbNumUP.DisplayMember = "NumInvent";
    cmbNumUP.ValueMember = "NumInvent";
}

private void cmbNumUP_SelectedIndexChanged( object sender, EventArgs e )
{
    if( cmbNumUP.SelectedItem != null )
    {
        // Récupère le processeur sélectionné par l'utilisateur
        ClassProcesseur processeurSelectionne = (ClassProcesseur)cmbNumUP.SelectedItem;

        // Affiche la désignation du processeur
        txtdesignationUP.Text = processeurSelectionne.Designation;
    }
}


De cette manière tu récupères les données de la table "Processeur" une fois pour toute !

Bonne continuation ;)
0
LoubnaML Messages postés 12 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 5 mai 2011
3 mai 2011 à 12:32
ok fréro merciii bcp je vais le réssayé et je te repondrai après
0
LoubnaML Messages postés 12 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 5 mai 2011
3 mai 2011 à 18:49
salut,
j'ai réssayer votre méthode et il me génére un erreur:

Liaison au nouveau membre display impossible
Nom du paramètre :new DisplayMember
0
LoubnaML Messages postés 12 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 5 mai 2011
5 mai 2011 à 12:05
s'il te plait aider moi j'ai besoin de votre propositions
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 7
6 mai 2011 à 07:11
Salut, je n'ai pas eu le temps ces derniers jours...
Je pourrais me pencher dessus cet aprèm !

Mais si tu pouvais m'envoyer ton code par mail ce serai plus facile de le debugger. (ludinski91@gmail.com)

cordialement
0