Zu diesem Thema habe ich bereits vor einigen Monaten im August 2011 einen Blogeintrag verfasst. In diesem Eintrag findet man die Anleitung, um eine Tabelle aus einer Access-Datenbank zu holen, und wieder zu speichern.
Heute werde ich beschreiben, wie man eine Tabelle mit Hilfe eines BindingNavigators an Textboxen bzw. bei einem Boolean an Checkboxen bindet.
Der BindingNavigator findet sich in der Toolbox von Visual Studio und kann einfach auf die nötige Form gezogen werden. Er hilft beim Navigieren durch Tabellen und sieht so aus:
Grundsätzlich wird die Verbindung mit der Datenbank genau gleich hergestellt. Bloss wird die BindingSource direkt an den BindingNavigator über das BindingSource-Property gebunden:
bindingNavigator.BindingSource = bSource.Source;
BindingSource an Text- / Checkboxen
Sobald die BindingSource also mit dem BindingNavigator verknüpft ist, müssen die einzelnen Tabellen-Spalten an die Textboxen gehängt werden. Dazu wird folgendes verwendet:
textBox.DataBindings.Add(new Binding("Text", bindingNavigator.BindingSource,"Spaltenname"));
Der 1. Parameter definiert die Eigenschaft der TextBox, an welche die Spalte gebunden werden soll, welche logischerweise "Text" ist. Der 2. die BindingSource und der 3. den Spaltennamen der BindingSource.
An eine Checkbox wird das ganze genau gleich gebunden:
checkBox.DataBindings.Add(new Binding("Checked", bindingNavigator.BindingSource, "Spaltenname"));
Speichern der Änderungen
Das speichern funktioniert wieder genau gleich. Es wird einfach nur
dAdapter.Update(dTable);
ausgeführt und schon ist die Tabelle gespeichert.
Was ich noch nie geschrieben habe ist, dass vor dem Speichern noch der Befehl:
bSource.EndEdit();
aufgerufen werden sollte, damit auch wirklich alle Änderungen in den Textboxen bzw. bei Datagridviews in den Zellen übernommen werden.
Hier zu beachten sind ebenfalls wieder die Error-Handlings, welche in diesem Blogeintrag vom Januar 2012 beschrieben sind.
Kombination aus Datagridview und Textboxen
Es ist ebenfalls möglich eine Kombination aus Datagridview und Textboxen zu verwenden, wobei das Datagridview bloss als Navigation durch die Tabelle und die Textboxen als Bearbeitungs-Felder dienen.
Der Vorteil, gegenüber dem BindingNavigator ist natürlich, dass man mit dem Datagridview eine viel bessere Übersicht hat und den gesuchten Datensatz viel schneller findet.
Dazu wird die BindingSource wie bereits beschrieben an das Datagridview gebunden.
Anschliessend werden die einzelnen Zellen direkt an die Textboxen gebunden.
Das wird am besten im RowEnter-Event des Datagridviews gemacht:
textBox.DataBindings.Add(new Binding("Text", Datagridview[Spaltenindex, Zeilenindex], "Value");
Der Spaltenindex ist klar, der Zeilenindex wird am besten über Datagridview.SelectedRows[0].Index genommen.
Wichtig ist das bei jedem Zeilenwechsel bzw. vor jeder erneuten Bindung, die alte Bindung gelöscht wird. Dazu wird folgender Befehl verwendet:
textbox.DataBindings.Clear();