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.
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";
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
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); } }
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 : 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); } }
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 : 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; } }
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)
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Merci bien, c'est vrai que ça allège de transformer les ArrayList en List<>
Bon allé, Topic suivant![]()
Partager