EDM: Kombinationsfelder erweitern

Wenn Sie ein Abonnement des Magazins 'DATENBANKENTWICKLER' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

EDM: Kombinationsfelder erweitern

Im Artikel »Lookup-Kombinationsfelder« zeigen wir, wie Sie eine per Drag and Drop aus dem Datenquellen-Bereich hinzugefügte Entität mit einem Kombinationsfeld versehen, mit dem Sie die Daten einer Lookup-Tabelle auswählen können. Dies wollen wir nun noch erweitern, und zwar um die Möglichkeit der Eingabe neuer Werte für die Lookup-Tabelle direkt über das Kombinationsfeld. Dazu nutzen wir ein neues Fenster, das die Daten der Tabelle Artikel anzeigt – und deren Kategorie per Kombinationsfeld auswählt.

Neuen Eintrag hinzufügen

Unter Access war es relativ einfach, ein Kombinationsfeld mit einer Funktion auszustatten, die dafür sorgte, dass neu eingegebene Einträge, die noch nicht in der Datensatzherkunft vorhanden waren, zur zugrunde liegenden Tabelle hinzugefügt werden und dann direkt im Kombinationsfeld angezeigt werden konnten. Wir wollen uns anschauen, wie dies unter WPF unter Verwendung unseres Entity Data Models auf Basis der Tabellen der Beispieldatenbank Bestellverwaltung funktioniert. Ein passendes Beispiel sind die Tabellen Artikel und Kategorien. Die Tabelle Artikel enthält ein Fremdschlüsselfeld, und zwar zur Auswahl der Kategorie des Artikels. Die Kategorien stammen wiederum aus der Tabelle Kategorien.

Für das neue Beispiel fügen wir der Datenquelle des Projekts die Entität Artikel hinzu. Ein neues Fenster soll die Daten der gleichnamigen Tabelle anzeigen. Dazu ändern wir den Typ der Entität Artikel per Kombinationsfeld auf Details und den Typ des Steuerelements KategorieID auf ComboBox. Dann ziehen Sie die Entität Artikel in das neue Fenster ArtikelMitKombinationsfeld und sortieren die enthaltenen Steuerelemente so wie in Bild 1 um. Damit die Daten auch im Fenster angezeigt werden, sind in aller Kürze die folgenden Schritte nötig:

Erstellen des Beispielfensters

Bild 1: Erstellen des Beispielfensters

  • Als Erstes ändern Sie den Entwurf im XAML-Code wie in Listing 1 dargestellt. Hier kommen vor allem die neue CollectionViewSource für die Kategorien und die Änderungen am ComboBox-Element zum Tragen.
  • Listing 1: Notwendige Änderungen am Fenster zur Anzeige von Artikeln mit Kategorien im Kombinationsfeld

  • Dann erweitern Sie den Code des Code behind-Moduls wie in Listing 2. Hier ist die Deklaration der beiden CollectionViewSource-Elemente und des Datenbankkontexts sowie deren Füllung im Ereignis Window_Loaded, das übrigens auch im XAML-Code noch hinzugefügt werden muss. Details hierzu erfahren Sie im Artikel EDM: Einfaches Detailfenster.
  • public partial class ArtikelMitKombinationsfeld : Window {
         public ArtikelMitKombinationsfeld() {
             InitializeComponent();
         }
         CollectionViewSource artikelViewSource;
         CollectionViewSource kategorienViewSource;
         BestellverwaltungEntities DBContext = new BestellverwaltungEntities();
         private void Window_Loaded(object sender, RoutedEventArgs e) {
             artikelViewSource = ((CollectionViewSource)(this.FindResource("artikelViewSource")));
             DBContext.Artikel.Load();
             artikelViewSource.Source = DBContext.Artikel.Local;
             kategorienViewSource = ((CollectionViewSource)(this.FindResource("kategorienViewSource")));
             DBContext.Kategorien.Load();
             kategorienViewSource.Source = DBContext.Kategorien.Local;
         }

    Listing 2: Anpassung der Code behind-Klasse des Fensters

Auf die Beschreibung der Navigationsschaltflächen verzichten wir an dieser Stelle – wie dies funktioniert, haben wir ebenfalls im Artikel EDM: Einfaches Detailfenster erläutert.

ComboBox zum Hinzufügen von Artikeln?

Nun schauen wir uns an, wie wir dem Kombinationsfeld einen neuen Eintrag unterjubeln können, der dann optimalerweise direkt in der zugrunde liegenden Tabelle Kategorien gespeichert wird. Wenn wir die Anwendung starten und in unserem Beispielfenster versuchen, wie etwa unter Access eine neue Kategorie einzugeben, stellen wir allerdings fest, dass ein ComboBox-Steuerelement wohl nicht zum Hinzufügen von Daten gemacht ist (siehe Bild 2). Was nun? Ein anderes Steuerelement wählen? Oder gibt es Einstellungen für das ComboBox-Steuerelement, die das Hinzufügen von eigenen Texten ermöglichen? Schauen wir uns doch zunächst eine einfache und auch für den Benutzer intuitive Variante an, bei der wir neben dem Kombinationsfeld eine Schaltfläche zum Hinzufügen eines Eintrags platzieren. Anschließend betrachten wir die direkte Eingabe neuer Elemente direkt in das Kombinationsfeld.

Das ComboBox-Steuerelement erlaubt nur die Auswahl, aber kein Anfügen von Einträgen.

Bild 2: Das ComboBox-Steuerelement erlaubt nur die Auswahl, aber kein Anfügen von Einträgen.

Einträge hinzufügen per Schaltfläche

Das Anbieten einer Schaltfläche mit einem Plus-Symbol scheint die offensichtlichere und intuitivere Variante zu sein, um Elemente zu einem Lookup-Kombinationsfeld hinzuzufügen. Nach einem Klick auf diese Schaltfläche soll eine Inputbox erscheinen, die den neuen Eintrag ermittelt (siehe ?Bild 3). Nach der Eingabe soll die Datenherkunft des Kombinationsfeldes direkt aktualisiert und der neue Eintrag übernommen werden, sodass das Kombinationsfeld diesen direkt anzeigt.

Kombinationsfeld mit Schaltfläche zum Hinzufügen neuer Einträge

Bild 3: Kombinationsfeld mit Schaltfläche zum Hinzufügen neuer Einträge

Im Entwurf des Fensters ArtikelMitKombinationsfeld_Button sieht dies wie in Bild 4 aus. Hier haben wir neben dem Kombinationsfeld eine neue Schaltfläche hinzugefügt, die wir mit einigen neuen Attributwerten ausgestattet haben.

Schaltfläche zum Hinzufügen neuer Einträge

Bild 4: Schaltfläche zum Hinzufügen neuer Einträge

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]