Listbox simple en C# [Résolu]

cs_Moris20 15 Messages postés mardi 6 novembre 2007Date d'inscription 31 janvier 2008 Dernière intervention - 20 nov. 2007 à 14:42 - Dernière réponse : cs_Moris20 15 Messages postés mardi 6 novembre 2007Date d'inscription 31 janvier 2008 Dernière intervention
- 22 nov. 2007 à 16:30
Bonjour,

Voici mon problème, je souhaite créer une listbox récupérant dans une table SQL id + nom + prenom sur chaque ligne,
puis, lorsque l'on clique sur une ligne, je souhaite récupérer uniquement l'id, je ne souhaite pas utiliser de datagrid.
Dans quel propriété et comment stocker l'id? voici mes pistes: listcontrol, valuemember, selectedvalue, malheureusement je ne comprend pas le fonctionnemement.
Je précise que ce code ne fonctionne pas, mais que la récupération de donnée fonctionne parfaitement.
Je ne souhaite pas utiliser (si possible) les fonction pour couper les chaine des caractère en agissant sur l'item.

//enregistrement de l'id dans la list box
while (r.Read())
{

listbox.Items.Add(r[
"id"] +
" " + r[
"nom"] +
" " + r[
"prenom"]);

Listbox.SelectedValue = r.['id"];

}

//lecture de l'id
messagebox.show(list_client.SelectedValue.ToString());

Merci du coup de main 
Afficher la suite 

Votre réponse

13 réponses

cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 21 nov. 2007 à 18:15
+3
Utile
C'est tout à fait possible que ce soit moi qui m'exprime mal  , donc je vais essayer de faire un pitit exemple :

une petite classe genre :

class MesInfo{

    //attributs
    private string _id;
    private string _nom;
    private string _prenom;

    //constructeur
    public MesInfo(string id,string nom,string prenom)
    {
        _id=id;
        _nom=nom;
        _prenom=prenom;
    }
   
    //accesseurs
    public string Id
    {
        get { return _id;}
        set { _id=value;}
    }
   
    public string Nom
    {
       get { return _nom;}
       set { _nom=value;}
    }




    public string Prenom

    {
       get { return _prenom;}

       set { _prenom=value;}

    }






    //ca ca sert a afficher le texte que tu veu dans ta combobox (en gros)
    public override string ToString()
        {
                return _id + " " + _nom + " " + _prenom;
        }




}

et apres pour ajouter un élément dans ta combobox tu fait juste :

maComboBox.Items.Add(new



MesInfo("Mon Id","Mon Nom",Mon Prenom"));

et pour recuprer quelque chose :




MesInfo info=(



MesInfo



)



maComboBox



.SelectedItem;

et voilou apres tu recupère ce que tu veu a partir de ton objet info ( info.Id / info.nom / info.prenom )

ex pour la messagebox :



messagebox.show(

info.Id


);

je trouve ca très pratique car c'est une classe que tu peu reutiliser souvent.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Kassidy
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 22 nov. 2007 à 11:56
+3
Utile
En fait tu n'appelle pas la methode ToString() "toi même", c'est lorsque ton objet s'affiche dans ton combobox qu'il y a appel à cette fonction,car sans elle il y aurrait normalement écrit un truc genre :




"MonProjet.



MonEspace.MesClients"





 (en imaginant que ton projet s'appelle "MonProjet" et que la définition de ta classe soit dans le namespace "MonEspace" (les namespaces si j'ai bien compris c'est + ou - comme les package java) )

alors qu'avec l'override (qui permet de modifier une fonction), on peut à la place afficher ce que l'on veut...

sinon pour les accesseur c'est très simple :




private
void
button_Click(
object
sender,
EventArgs

e)

{
    //les champs seront egale a "" comme ecrit dans le constructeur sans parametre




    Mesclients

client =

new

Mesclients

(




);



 




    textbox1.Text=



"blabla"
    //



defini la valeur Id de client





    client.Id=



textbox1.Text



;
   
   



//



defini la valeur Nom de client





    client.nom="un nom";

    //affichera "blabla";
    MessageBox.show(client.id);

    //obitent la valeur Id de client, la textbox2 contiendra "blabla"
    textbox2.text=client.Id;
}

voili voilou
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Kassidy
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 22 nov. 2007 à 11:59
+3
Utile
Oups désolé je pensait avoir fait un constructeur sans parametre...

il faudrait en rajouter un autre pour que ce que j'ai fait fonctionne :

//a ajouter dans la class MesClients,en plus de l'autre constructeur :




  public MesInfo()
    {
        _id="";
        _nom="";
        _prenom="";
    }
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Kassidy
cs_Moris20 15 Messages postés mardi 6 novembre 2007Date d'inscription 31 janvier 2008 Dernière intervention - 22 nov. 2007 à 14:44
+3
Utile
Pour les accesseurs et le constructeur a rajouter, c'est bon j'ai compris, sa doit marcher nikel.(ma classe s'appel Mesclients)
Par contre pour la fonction et la combobox je ne comprend pas.
Comment rempli-ton la combobox (avec plusieur objets? et comment en cliquant sur la combo, récupère-t-on l'id de mes clients? j'ai bien une petite idée pour remplir la combobox, mais du coup je ne vois pas l'utilité de la fonction public override string ToString(), je ne comprend pas ce qu'elle retourne ni comment récuperer le résultat (dsl je ->):

while (i<nb_client)
{
combobox.item.add(client[i].id + " " + client[i].prenom + " " + client[i].nom )?)
}

Autre question, comment crée-t-on une collection de clients, comme ceci?????
Mesclients client[100] = new Mesclients();
A priori sa ne fonctionne pas.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Moris20
cs_Moris20 15 Messages postés mardi 6 novembre 2007Date d'inscription 31 janvier 2008 Dernière intervention - 22 nov. 2007 à 15:13
+3
Utile
Phénoménale, après relecture du post, voici l'algorithme complet auquel je suis arrivé, (et sa fonctionne) Tout d'abord la classe, puis le bouton creer, puis le click sur la combobox, Merci Kassidy, juste une dernière petite question, a savoir comment créer une collection d'objet?

class

Mesclients{

//attributs

public
string _id_client;

public
string _prenom;

public
string _nom;

public
string _adresse;

//constructeur

public Mesclients(
string id,
string nom,
string prenom,
string adresse){

_id_client = id;

_nom = nom;

_prenom = prenom;

_adresse = adresse;

}

public Mesclients(){

_id_client=

"";_nom=
"";_prenom"";_adresse

"";}

//accesseurs

public
string id{

get {
return
this._id_client; }

set {
this._id_client =
value;}}

public
string nom{

get {
return
this._nom; }

set {
this._nom =
value;}}

public
string prenom{

get {
return
this._prenom; }

set {
this._prenom =
value;}}

public
string adresse{

get {
return
this._adresse; }

set {
this._adresse =
value; }}

//afficher le texte

public
override
string ToString(){

return _id_client +
" " + _nom +
" " + _prenom +
" " + _adresse;}

}

private
void button_creerclient_Click(
object sender,
EventArgs e){

Mesclients client =
new
Mesclients();client.id = text_idclient.Text;

client.prenom = text_prenom.Text;

client.nom = text_nom.Text;

client.adresse = text_adresse.Text;

//ajouter un élément dans ta combobox tu fait juste :combobox_client.Items.Add(client);

}

private
void combobox_client_SelectedIndexChanged(
object sender,
EventArgs e){

//pour recuprer quelque chose :

Mesclients client1 = (
Mesclients)combobox_client.SelectedItem;

MessageBox.Show(client1.id);}

}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Moris20
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 22 nov. 2007 à 15:21
+3
Utile
pour le combobox tu peut faire plutot

//



pour le while je met rien car tout dépend de ta facon de recuperer les infos(base de données,datagrid etc...)





while(......)
{
    combobox.Item.Add(new MesClients(valeur1,valeur2,valeur3));
}

Pour les collections de clients, je te suggère les Arrylist, qui te permettent des collections d'objet :

Arraylist ToutMesClients = new Arraylist();

while (....)
{
   



ToutMesClients



.Add(new MesClients(val1,val2,val3));
}

et apres pour les lires tu fait 1 cast :




MesClients client;





for (int i=0;i<ToutMesClients.Count;i++)
{




    client = (



MesClients)



ToutMesClients[i];





}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Kassidy
cs_Moris20 15 Messages postés mardi 6 novembre 2007Date d'inscription 31 janvier 2008 Dernière intervention - 22 nov. 2007 à 16:30
+3
Utile
Merci beaucoup, mais sa fait trop pour une seule journée, je vais m'entrainer un peu juste avec les objet, on véra plus tard pour tester les collection, merci beaucoup, chaque conseil était drolement pertinant.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Moris20
cs_Moris20 15 Messages postés mardi 6 novembre 2007Date d'inscription 31 janvier 2008 Dernière intervention - 21 nov. 2007 à 11:22
0
Utile
Alors tout le monde s'en fiche?
Commenter la réponse de cs_Moris20
cs_niky 168 Messages postés jeudi 28 juin 2001Date d'inscription 18 octobre 2008 Dernière intervention - 21 nov. 2007 à 11:38
0
Utile
Salut,

utilises plutôt un ListView à la place de ta listbox. Dans la listview, tu pourras ajouter des ListViewItem et placer l'id dans la propriété Tag de chaque ListViewItem.
Commenter la réponse de cs_niky
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 21 nov. 2007 à 15:35
0
Utile
Sinon ce que tu peut faire c'est un combobox dans lequel tu ajoute des instance d'un  objet que tu a créé toi même, moi c'est ce que  je fait ca marche nikel, et comme ca tu peut recupérer l'info que tu veu.
Commenter la réponse de cs_Kassidy
cs_Moris20 15 Messages postés mardi 6 novembre 2007Date d'inscription 31 janvier 2008 Dernière intervention - 21 nov. 2007 à 17:47
0
Utile
Pour la list view dans le principe sa à l'air de fonctionner, reste plus qu'a tester la pratique.
Pour la combobox,

   Kassidy dit :
   tu ajoute des instance d'un  objet que tu a créé toi même,

Je suis navré mais alors là je ne comprend pas comment faire... je crée un objet avec un attribut "id" en plus? je ne c'est pas le faire mais peut etre... il faudrait que je révise mes classiques.

Merci
Commenter la réponse de cs_Moris20
cs_Moris20 15 Messages postés mardi 6 novembre 2007Date d'inscription 31 janvier 2008 Dernière intervention - 22 nov. 2007 à 08:58
0
Utile
Magnifique, non seulement sa résoud mon problème, mais en plus sa me fait un rappel  en  objet dont j'avais énormément besoin.

Sur ce, je vais faire 2 ou 3 petit test, Merci.
Commenter la réponse de cs_Moris20
cs_Moris20 15 Messages postés mardi 6 novembre 2007Date d'inscription 31 janvier 2008 Dernière intervention - 22 nov. 2007 à 10:48
0
Utile
On s'éloigne du sujet principal mais,

Kassidy a dit :
    //ca ca sert a afficher le texte que tu veu dans ta combobox (en gros)
    public override string ToString()
        {
                return _id + " " + _nom + " " + _prenom;
        }

L'objet est crée, mais :
Comment appel-ton-cette fonction a partir d'un bouton hors de la classe, pour afficher le résultat dans une messagebox.
Comment appel-ton les accesseurs à partir d'un bouton hors de la classe.
Coment passe t'on en paramètre la valeur d'un champ textbox.

private
void button_Click(
object sender,
EventArgs e)
{

Mesclients client =
new
Mesclients(
"turm",
"turm",
"turm",
"turm");

MessageBox.Show("afficher le text de la dernière fonction");
}
private
void modifier_Click(
object sender,
EventArgs e)
{

Mesclients client =
new
Mesclients(
"",
"",
"",
"");

//En utilisant les accesseurs (sans les mettre dans le constructeur car c'est pour aprendre à utiliser les accesseurs),
//en mettant textbox1.text à la place des value, sa ne fonctionne pas.
textbox1.text
textbox2.text
textbox3.text
textbox4.text
}

Merci
Commenter la réponse de cs_Moris20

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.