Combobox et concaténation [Résolu]

lefreeman42 28 Messages postés lundi 24 octobre 2005Date d'inscription 15 juin 2006 Dernière intervention - 24 oct. 2005 à 18:16 - Dernière réponse : lefreeman42 28 Messages postés lundi 24 octobre 2005Date d'inscription 15 juin 2006 Dernière intervention
- 27 oct. 2005 à 09:13
Bonjour,



Voila, je suis étudiant et j'ai commencé à programmer en c# depuis début septembre.



J'ai un problème avec une combobox.

Notre prof veut que nous fassions une recherche sur le nom de personnes
que nous avons créé à l'aide d'un formulaire avec une collection
(jusque la pas de soucis), mais si nous mettons deux fois le même nom
alors il y a un plantage.Donc j'ai créé un numéro de personne, le seul
hic c'est que faire une recherche sur un numéro de personne ben c'est
pas terrible lol

Donc j'ai voulu concaténé le nom de la personne et son numéro dans une
combobox que je charge dans le form_load, mais le problème, c'est que
je ne sais pas comment récupérer le numéro une fois concaténé : (

Si quelqu'un pouvait me dire un moyen de récupérer juste le numéro ou une solution plus simple, ca m'aiderait beaucoup



Merci d'avance ^^
Afficher la suite 

25 réponses

Répondre au sujet
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 25 oct. 2005 à 10:58
+3
Utile
va voir ceci : http://www.csharpfr.com/code.aspx?ID=34338

Sébastien FERRAND
[MVP C#]
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sebmafate
georgeduke 171 Messages postés dimanche 6 février 2005Date d'inscription 13 avril 2007 Dernière intervention - 24 oct. 2005 à 18:43
0
Utile
Désolé mais je ne comprends pas bien ton souci. Peut tu le réexpliquer ?
Commenter la réponse de georgeduke
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 24 oct. 2005 à 19:31
0
Utile
Salut,

Met ton numéro en temps que Value quand tu définis les items et sert toi de SelectedValue pour récupérer le numéro de personne pour l'item sélectionné.

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 25 oct. 2005 à 06:20
0
Utile
c'est du web ou du winform ?

car la solution est différente...

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 25 oct. 2005 à 09:09
0
Utile
Je prends le pari sur du Winform moi

Mx
Commenter la réponse de MorpionMx
lefreeman42 28 Messages postés lundi 24 octobre 2005Date d'inscription 15 juin 2006 Dernière intervention - 25 oct. 2005 à 09:15
0
Utile
C'est du winform
Commenter la réponse de lefreeman42
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 25 oct. 2005 à 09:17
0
Utile
Alors utilise la solution de coq

Mx
Commenter la réponse de MorpionMx
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 25 oct. 2005 à 09:22
0
Utile
nan... coq, c'est du webform

ce que tu peux faire pour résoudre ton problème c'est plutot que de donner une chaine de caractère à ton combobox, c'est lui donner des objets.

ex :

struct Personne {
public string Nom;
public string Prenom;
public int Id;
...

public override string ToString() {
return this.Nom + " " + this.Prenom;
}
}

et donc tu fais ceci :

Personne pers = new Personne();
pers.Nom = "Truc";
pers.Prenom = "Bidule";
pers.Id = 500;
tonCombo.Items.Add(pers);
... etc...

et tu récupères comme ceci :

((Personne)tonCombo.SelectedItem).Id --> 500

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
lefreeman42 28 Messages postés lundi 24 octobre 2005Date d'inscription 15 juin 2006 Dernière intervention - 25 oct. 2005 à 09:33
0
Utile
Cette partie correspond au chargement de la combobox:



private void Fvisuclient_Load(object sender, System.EventArgs e)

{

int
j=mesPersonnes.cardinal(); //On compte le nombre d'objets dans la
collection mesPersonnes

unePersonne = new Personne();



for (int i=0; i<j ; i++)

{



unePersonne=(Personne)mesPersonnes.extraireObjet(i);//On extrait tous
les objets de la collection

string nom=unePersonne.getNom();


string
num=Convert.ToString(unePersonne.getNumeroPersonne());


cb_nom.Items.Add(nom+" "+num); //Puis on les ajoute
dans la combobox

}

}



La c'est la combobox :



private void cb_nom_SelectedIndexChanged(object sender, System.EventArgs e)

{

int num=Convert.ToInt32(cb_nom.Text);

unePersonne=new Personne();

int
j=mesPersonnes.cardinal(); //On compte le nombre d'objets dans la
collection mesPersonnes

unePersonne = new Personne();



for (int i=0; i<j ; i++)

{



unePersonne=(Personne)mesPersonnes.extraireObjet(i);//On extrait tous
les objets de la collection




//On fait une recherche sur le numéro car unique
pour chaque client

if (num==unePersonne.getNumeroPersonne())

{

lb_nom.Text=unePersonne.getNom();



lb_prenom.Text=unePersonne.getPrenom();



lb_date.Text=Convert.ToString(unePersonne.getDateNaissance());

}

}

}



Je réexplique mon problème, si dans ma collection mesPersonnes il y a
deux noms identiques ===> plantage du prog, je n'affiche pas ce que
je veux...

Donc solution, faire une recherche sur un numéro qui est unique pour
chaque personne, mais faire une recherche sur un numéro ce n'est pas
terrible. Pour plus de clarté, je veux afficher le nom ET le numéro de
la personne, mais je ne sais pas comment je dois faire pour déconcaténé
les données que j'ai chargé dans ma combobox.

Est-ce que c'est plus clair la ???J'arrive pas mieux à expliquer,
désolé...L'année dernière on programmait en php4 (en 1ere année de BTS
IG), et cette année on passe direct aux objets avec le C#, pas facile
la transition :x

Si c'est pas possible, faites le moi savoir ca m'éviterait que je me complique la vie pour rien lol
Commenter la réponse de lefreeman42
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 25 oct. 2005 à 09:36
0
Utile
Ah oui zut
J'aurais du attendre d'etre bien reveillé avant de poster


Mx
Commenter la réponse de MorpionMx
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 25 oct. 2005 à 09:41
0
Utile
hum... as-tu lu la réponse que j'ai mis avant toi ???
dans ton combobox ne met pas de libelle mais uniquement des objets !

il te suffit de faire un override de la méthode ToString() pour afficher la concaténation de ce que tu veux. Et pour récupérer la valeur, tu fais un cast... y a pas plus simple !

re-exemple :
private void Fvisuclient_Load(object sender, System.EventArgs e)
{
int j=mesPersonnes.cardinal(); //On compte le nombre d'objets dans la collection mesPersonnes

for (int i=0; i<j ; i++)
{
unePersonne=(Personne)mesPersonnes.extraireObjet(i);//On extrait tous les objets de la collection
cb_nom.Items.Add(unePersonne); //Puis on les ajoute dans la combobox
}
}

et pour récupérer :
private void cb_nom_SelectedIndexChanged(object sender, System.EventArgs e)
{
if (cn_nom.SelectedIndex != -1)
unePersonne = (Personne)cb_nom.SelectedItem;
}

si c'est trop compliqué... je comprends pas :(

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
lefreeman42 28 Messages postés lundi 24 octobre 2005Date d'inscription 15 juin 2006 Dernière intervention - 25 oct. 2005 à 09:42
0
Utile
je vais essayer, je te dis ca dans 5-10 minutes ^^
Commenter la réponse de lefreeman42
lefreeman42 28 Messages postés lundi 24 octobre 2005Date d'inscription 15 juin 2006 Dernière intervention - 25 oct. 2005 à 09:58
0
Utile
Je viens de me rendre compte que j'ai oublié de préciser que Personne est une classe...

Apparemment avec ta méthode je ne l'utilise plus...

Désolé, mais merci quand même pour la solution ^^



si ca peut voici le bordel :



//Description des données

private int numeropersonne;

private string nom;

private string prenom;

private DateTime datenaissance;

//Fin de description des données



//Description des méthodes



//Accesseurs set

//Insertion du nom

public void setNom (string n)

{

nom=n;

}



//Insertion du prenom

public void setPrenom (string p)

{

prenom=p;

}



//Insertion de la date

public void setDateNaissance (DateTime datenaiss)

{

datenaissance=datenaiss;

}

//Fin des accesseurs set



//Accesseurs get

//Renvoi le numéro du client

public int getNumeroPersonne()

{

return numeropersonne;

}



//Renvoi le nom

public string getNom()

{

return nom;

}



//Renvoi le prénom

public string getPrenom()

{

return prenom;

}



//Renvoi la date de naissance

public DateTime getDateNaissance()

{

return datenaissance;

}

//Fin des accesseurs get

//Fin des accesseurs



//Initialisation du client:on entre les différentes valeurs des champs qui ont été saisis

public void initPersonne (string n, string p, DateTime d)

{


numeropersonne=tirageNumeroPersonne(); //on crée un numero pour le
nouveau client

nom=n;

prenom=p;

datenaissance=d;

}



//Création d'un numéro de client

public int tirageNumeroPersonne()

{

Random rnd=new Random();

int num=rnd.Next();

return num;

}

//Fin de description des méthodes
Commenter la réponse de lefreeman42
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 25 oct. 2005 à 10:14
0
Utile
justement avec ma solution... ta classe Personne est au centre de tout !!!

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 25 oct. 2005 à 10:20
0
Utile
Ma solution , qui rejoint celle de seb



Deja, transforme ta classe Personne ainsi :



class Personne

{

private string nom;

private string prenom;

private DateTime datenaissance;



// Propriétés



public string Nom

{

get { return this.nom; }

set { nom = value; }

}



public string Prenom

{

get { return prenom; }

set { prenom = value; }

}



public DateTime Datenaissance

{

get { return datenaissance; }

set { datenaissance = value; }

}





//Constructeur de la classe

public Personne(string n, string p, DateTime d)

{

nom = n;

prenom = p;

datenaissance = d;

}

}



Ensuite, dans ta form, rajoute un ArrayList (que j'ai appelé List dans mon exemple)

Ajoute toute les instances de Personne dans cette ArrayList



this.list.Add(new Personne("aaa", "aaa", DateTime.Now));

this.list.Add(new Personne("bbb", "bbb", DateTime.Now));

this.list.Add(new Personne("aaa", "aaa", DateTime.Now));



Ajoute aussi ces 2 lignes (dans ton constructeur par exemple), qui
binderont ton Combobox a ton ArrayList. Il n'y aura plus besoins de ta
boucle for qui charge ton combobox



<hr size ="2" width="100%"> this.comboBox1.DataSource = list;

this.comboBox1.DisplayMember = "Nom";



Et pour recuperer la personne choisie dans le combobox :



private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

Personne temp = (Personne)this.comboBox1.SelectedItem;

MessageBox.Show(temp.Nom +" " + temp.Prenom);



}


Mx
Commenter la réponse de MorpionMx
lefreeman42 28 Messages postés lundi 24 octobre 2005Date d'inscription 15 juin 2006 Dernière intervention - 25 oct. 2005 à 10:24
0
Utile
"struct Personne {

public string Nom;

public string Prenom;

public int Id;

...



public override string ToString() {

return this.Nom + " " + this.Prenom;

}

}

et donc tu fais ceci :



Personne pers = new Personne();

pers.Nom = "Truc";

pers.Prenom = "Bidule";

pers.Id = 500;

tonCombo.Items.Add(pers);

... etc...



et tu récupères comme ceci :



((Personne)tonCombo.SelectedItem).Id"



C'est ca que je comprend pas...Je met quoi a la place de bidule and co
, parce que je ne peux plus utiliser les méthodes de ma classe...

"il te suffit de faire un override de la méthode ToString() pour
afficher la concaténation de ce que tu veux. Et pour récupérer la
valeur, tu fais un cast... y a pas plus simple !"

Je sais pas ce que c'est qu'un cast et un override...Plus débutant que moi tu meurs...
Commenter la réponse de lefreeman42
lefreeman42 28 Messages postés lundi 24 octobre 2005Date d'inscription 15 juin 2006 Dernière intervention - 25 oct. 2005 à 10:28
0
Utile
Ta solution parait nikel...mais je fais comment car je sais pas a
l'avance combien de personnes il y a...on les inscrit une par une a
l'aide d'une autre fenetre...C'est un truc de fou ce nous demande le
prof lol (pour mon niveau en tout cas...)
Commenter la réponse de lefreeman42
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 25 oct. 2005 à 10:29
0
Utile
mouaip... biensur ce que tu n'as pas vu, c'est que j'ai reposté une solution adapté à la classe que tu as cité.

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
lefreeman42 28 Messages postés lundi 24 octobre 2005Date d'inscription 15 juin 2006 Dernière intervention - 25 oct. 2005 à 10:34
0
Utile
En mettant ce que tu m'as dit a savoir ca (je ne change rien d'autre):



private void Fvisuclient_Load(object sender, System.EventArgs e)

{

int
j=mesPersonnes.cardinal(); //On compte le nombre d'objets dans la
collection mesPersonnes



for (int i=0; i<j ; i++)

{



unePersonne=(Personne)mesPersonnes.extraireObjet(i);//On extrait tous
les objets de la collection


cb_nom.Items.Add(unePersonne); //Puis on les ajoute dans la combobox

}

}



private void cb_nom_SelectedIndexChanged(object sender, System.EventArgs e)

{

if (cb_nom.SelectedIndex != -1)

unePersonne
= (Personne)cb_nom.SelectedItem;

}

j'ai cette erreur

"Une exception non gérée du type 'System.FormatException' s'est produite dans mscorlib.dll



Informations supplémentaires : Le format de la chaîne d'entrée est incorrect."
Commenter la réponse de lefreeman42
lefreeman42 28 Messages postés lundi 24 octobre 2005Date d'inscription 15 juin 2006 Dernière intervention - 25 oct. 2005 à 11:16
0
Utile
Je te remercie, il super ton prog ^^
Commenter la réponse de lefreeman42

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Combobox et concaténation - page 2