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.
Version imprimable
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.
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:
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:
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); } }
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...
C'est un peu de la bidouille, tu trouves pas ? ;)Code:
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); } }
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 :
Plus simple, non ? ;)Code:
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; } }
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)
Merci bien, c'est vrai que ça allège de transformer les ArrayList en List<> ;)
Bon allé, Topic suivant :mouarf:
tu n'oublierais pas quelque chose ? :roll:
:resolu: ;)
Si t'insistes...;)