Frank Dzaebel, erstellt am: 02.07.2006, zuletzt geändert:
09.3.2010
Kategorie: Datenbinding, .NET-Version: 2.0, [Download]
Eine recht einfache Methode zur typsicheren Datenbindung mit Master/Detail-Tabelle:
Man erstellt mit dem Designer ein DataSet mit zwei Tabellen und zieht mit der Maus von der Master-Tabelle[Spalte IDMT] auf die Detail-Tabelle. So ergibt sich automatisch eine Beziehung (hier zwischen den Schlüssel- und Fremdschlüsselspalten IDTM). Man kann die Master- und die ausgeklappte Detail-Tabelle nun einfach in die Form ziehen. Der Speichern-Button muss ggf. noch enabled werden. Das Laden und Speichern wird hier über eine XML-Datei erledigt.
Zusätzlich, wird ein Beispiel für eine an eine Detail-Datenquelle gebundene ComboBox gegeben. Der Trick ist in diesem Szenario, das Binden des DataSource's an eine Kopie eines DataTables, um ein unerwünschtes Setzen des Original-Datenquelle zu verhindern. Ohne dies würde man ggf. doppelte Einträge in der Wert-Auswahl der ComboBox finden, nachdem unterschiedliche Werte selektiert worden wären.

Weitere Beispiele und Details:
- Gewusst wie: Erstellen eines Master-/Detailformulars mit zwei DataGridView-Steuerelementen in Windows Forms
- Beispiel für das DataGridView-Steuerelement (u.a. Master/Detail, Hyperlinkspalte, ungebundene CheckBoxColumn)
- Beispiel für benutzerdefinierte DataGridView-Spalten (Hosten eines MaskedTextBox-Steuerelementes)
WPF
-
How Do I: Build a WPF Data Entry Form Using Entity
Framework (Mit SQL-DB-Erstellung)
-
How Do I: Build a WPF Master-Detail Data Entry Form
Using Entity Framework
string filename = "daten.xml";
private void Form1_Load(object sender,EventArgs e)
{
((DataSet1)masterBindingSource.DataSource).ReadXml(filename);
wertComboBox.DataSource = dataSet1.Detail.Copy();
wertComboBox.DisplayMember = "Wert";
wertComboBox.ValueMember = "IDMT";
wertComboBox.DataBindings.Add("Text", detailBindingSource, "Wert");
}
private void masterBindingNavigatorSaveItem_Click(object sender,EventArgs e)
{
((DataSet1)masterBindingSource.DataSource).WriteXml(filename);
}