Master Detail mit List<>
Möchte man Listen (System.Collection.Generic.List<>) an Comboboxen mittels einer Master-Detail-Beziehung anbinden, so bietet sich die hier dargestellte Vorgehensweise an.
Code der Listen:
public class Detail { public String Caption { get; set; } public int Id { get; set; } public Detail(string caption) { Caption = caption; } } public class DetailList: List<Detail> { public String DetailListCaption { get; set; } public DetailList(string masterCaption) { DetailListCaption = masterCaption; } } public class Master: List<DetailList> { } |
Zur Anwendung wird die Liste bespielhaft befüllt:
private Master master = new Master(); ... master.Add(new DetailList("Cap Master 1")); master.Add(new DetailList("Cap Master 2")); master[0].Add(new Detail("Cap Detail 1.1")); master[0].Add(new Detail("Cap Detail 1.2")); master[1].Add(new Detail("Cap Detail 2.1")); master[1].Add(new Detail("Cap Detail 2.2")); |
Nun werden noch zwei BindingSource-Komponenten erzeugt und initialisiert:
masterBindingSource = new BindingSource {DataSource = typeof (Master)}; comboBox1.DataSource = masterBindingSource; comboBox1.DisplayMember = "DetailListCaption"; detailBindingSource = new BindingSource {DataSource = typeof (DetailList)}; comboBox2.DataSource = detailBindingSource; comboBox2.DisplayMember = "Caption"; masterBindingSource.CurrentChanged += masterBindingSource_CurrentChanged; ... private void masterBindingSource_CurrentChanged(object sender, EventArgs e) { detailBindingSource.DataSource = masterBindingSource.Current; } |
Wichtig ist dann nur noch die Initialisierung der Datasource mit einem konkreten Wert:
masterBindingSource.DataSource = master; |