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 :

Remplir ListBox depuis une classe


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 85
    Par défaut Remplir ListBox depuis une classe
    Bonsoir,
    pour faire simple et générique, J'ai une classe X qui contient une liste d'une autre classe Y, et j'aimerai utiliser X en tant que source de donnée pour une listBox. Comment puis-je faire ?

    Cordialement,
    Julien T.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par A0659 Voir le message
    Bonsoir,
    pour faire simple et générique, J'ai une classe X qui contient une liste d'une autre classe Y, et j'aimerai utiliser X en tant que source de donnée pour une listBox. Comment puis-je faire ?

    Cordialement,
    Julien T.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    listBox1.DataSource = x.ListeDeY;
    listBox1.DisplayMember = "nom de la propriété de Y à afficher";
    listBox1.ValueMember = "nom de la propriété de Y à utiliser comme valeur";

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 85
    Par défaut
    Après avoir tenté, et de bonne volonté, je suis face à un mur. 0 chaque fois dans ma liste, Ce qui apparaît est tout bonnement : "Namespace.NomDelaClasse"

    Voilà donc mon code, vraiment je sèche =/

    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
        public partial class MainWindow : Form
        {
            Series listSeries;
            Saisons listSaisons;
            Episodes listEpisodes;
     
            public MainWindow()
            {
                InitializeComponent();
     
                listSeries = new Series();
                listSeries.AddSerie(new Serie(1,"lol"));
     
     
                listBox1.DataSource = listSeries.listSerie;
                listBox1.DisplayMember = "Name";
                // listBox1.ValueMember = ""; < Je sais vraiment pas quoi mettre
            }
     
            private void quitterToolStripMenuItem_Click(object sender, EventArgs e)
            {
                this.Close();
            }
        }
    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
    [XmlRoot("serie")]
        public class Serie 
        {
            [XmlElement("id")]
            public int id;
            [XmlElement("name")]
            public String Name;
     
            public Serie()
            {
            }
     
            public Serie(int id, String name)
            {
                this.id = id;
                this.Name = name;
            }
        }
     
        [XmlRoot("series")]
        public class Series
        {
            private ArrayList listSerie;
     
            public Series()
            {
                listSerie = new ArrayList();
            }
     
            [XmlElement("serie")]
            public Serie[] ListSerie
            {
                get
                {
                    Serie[] series = new Serie[listSerie.Count];
                    listSerie.CopyTo(series);
                    return series;
                }
                set
                {
                    if (value == null) return;
                    Serie[] series = (Serie[])value;
                    listSerie.Clear();
                    foreach (Serie ser in series)
                        listSerie.Add(ser);
                }
            }
     
            public int AddSerie(Serie serie)
            {
                return listSerie.Add(serie);
            }
        }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 85
    Par défaut
    Réussi ! Il suffisait d'ajouter des getter

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par A0659 Voir le message
    Réussi ! Il suffisait d'ajouter des getter
    J'allais le dire...

    Pour la propriété ValueMember, le plus logique dans ton cas semble de mettre l'Id.

    Par contre, j'ai quelques suggestions pour améliorer ton code...
    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
            private ArrayList listSerie;
     
            ...
     
            [XmlElement("serie")]
            public Serie[] ListSerie
            {
                get
                {
                    Serie[] series = new Serie[listSerie.Count];
                    listSerie.CopyTo(series);
                    return series;
                }
                set
                {
                    if (value == null) return;
                    Serie[] series = (Serie[])value;
                    listSerie.Clear();
                    foreach (Serie ser in series)
                        listSerie.Add(ser);
                }
            }
    C'est un peu de la bidouille, tu trouves pas ?
    En plus ça te fait recréer une instance de Serie[] à chaque appel à la propriété, et tu ne peux pas facilement ajouter/supprimer une série puisque tu es obligé de passer par un tableau. Et tout ça pour avoir une collection typée de Series...
    Si tu utilises le framework 2.0 ou plus, je te suggère d'utiliser les listes génériques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            private List<Serie> listSerie;
     
            ...
     
            [XmlElement("serie")]
            public List<Serie> ListSerie
            {
                get { return listSerie; }
                set { listSerie = value; }
            }
    Plus simple, non ?

    Dans l'absolu, je pense que ListSerie devrait même être en lecture seule (pas d'accesseur set), et on n'attaquerait la collection que par des Add/Remove/Clear. Je le laisse juste parce que sinon ça poserait des problèmes pour la désérialisation XML (et encore, j'en suis même pas sûr... à tester)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 85
    Par défaut
    Merci bien, c'est vrai que ça allège de transformer les ArrayList en List<>

    Bon allé, Topic suivant

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

Discussions similaires

  1. Remplir un datagrid depuis une classe
    Par CryoCid dans le forum VB.NET
    Réponses: 4
    Dernier message: 16/04/2010, 15h24
  2. remplir un datagridview depuis une classe
    Par thor76160 dans le forum C#
    Réponses: 2
    Dernier message: 03/04/2010, 14h00
  3. acces a uneressource bitmap depuis une classe
    Par firejocker dans le forum MFC
    Réponses: 9
    Dernier message: 03/02/2006, 21h48
  4. Réponses: 14
    Dernier message: 15/12/2005, 18h46
  5. Référence à un objet existant depuis une classe
    Par Adrenalys dans le forum ASP
    Réponses: 2
    Dernier message: 21/07/2005, 00h44

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