Master/Detail mit DataSet-Designer  
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);
}