Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Wer von Access kommt und Datenbankanwendungen mit Visual Studio programmieren möchte, vermisst vermutlich das einfache Datenblatt, das man unter Access mit wenigen Mausklicks zusammenstellen konnte. Dieses zeigt nicht nur die Datensätze der als Datenherkunft verwendeten Tabelle oder Abfrage an, sondern bietet auch die Möglichkeit, die enthaltenen Daten zu ändern, zu löschen oder durch neue Datensätze zu ergänzen. Dies wollen wir in diesem Artikel durch den Einsatz eines entsprechend programmierten DataGrid-Steuerelements nachbauen.
Beispieldaten
In den Artikeln Von Access zu Entity Framework: Datenmodell und Von Access zu Entity Framework: Daten haben wir gezeigt, wie Sie ein Entity Data Modell auf Basis eines Access-Datenmodells erstellen und die Daten für die daraus zu erzeugenden Tabellen in eine Seed-Methode schreiben. Im Beispielprojekt dieses Artikels haben wir das Entity Data Model und die Klasse mit der Seed-Methode bereits angelegt, sodass Sie nach dem Kopieren des Projektordners auf Ihren Rechner einfach nur den die Anweisung Update-Database in der Paket-Manager-Konsole ausführen müssen. Dadurch sollte automatisch eine Datenbank für den in der Verbindungszeichenfolge angegebenen SQL Server, hier LocalDb, angelegt und mit den angegebenen Tabellen und Daten gefüllt werden.
Fenster mit DataGrid anlegen
Wir wollen gleich ein eigenes Fenster für dieses Beispiel anlegen, das Sie dann über eine Schaltfläche vom Fenster MainWindow aus aufrufen können. Dazu legen wir die folgende Schaltfläche in diesem Fenster an:
<Grid> <Button x:Name="btnProdukteDataGrid" Click="btnProdukteDataGrid_Click">DataGrid mit Produkten</Button> </Grid>
Die Schaltfläche soll die folgende Ereignismethode aufrufen:
Private Sub btnProdukteDataGrid_Click(sender As Object, e As RoutedEventArgs) Dim wnd As Window wnd = New ProdukteDataGrid wnd.ShowDialog() End Sub
Das neue Fenster nennen wir ProdukteDatagrid.xaml. Zunächst legen wir ein paar Elemente in der Code behind-Klasse an, der wir zunächst die Konstruktor-Methode hinzufügen:
Public Class ProdukteDataGrid Public Sub New() End Sub End Class
Wir benötigen einen Verweis auf den Namespace System.Collections.ObjectModel:
Imports System.Collections.ObjectModel
In der Klasse definieren wir eine lokale Variable für die Kontextklasse sowie die Liste der Produkte:
Private dbContext As BestellverwaltungContext Private m_Produkte As ObservableCollection(Of Produkt)
Die Liste der Produkte wollen wir über eine öffentliche Eigenschaft namens Produkte verfügbar machen:
Public Property Produkte() As ObservableCollection(Of Produkt) Get Return m_Produkte End Get Set(ByVal value As ObservableCollection(Of Produkt)) m_Produkte = value End Set End Property
Damit das DataGrid beim Öffnen direkt mit den Daten gefüllt wird, erweitern wir die Konstruktormethode mit diesen Anweisungen:
Public Sub New() InitializeComponent() dbContext = New BestellverwaltungContext Produkte = New ObservableCollection(Of Produkt)(dbContext.Produkte) DataContext = Me End Sub
Darin füllen wir die Kontext-Variable und die List-Variable Produkte mit der Liste der Produkte. Schließlich stellen wir den DataContext auf die Code behind-Klasse ein. Wenn wir nun das Projekt starten und im Fenster MainWindow auf die Schaltfläche klicken, erscheint das DataGrid wie in Bild 1.
Bild 1: DataGrid mit den Daten der Tabelle Produkte
Kombinationsfelder anzeigen
Die Daten der Felder KategorieID und MehrwertsteuersatzID möchten wir gern aus den jeweils verknüpften Auflistungen Kategorien und Mehrwertsteuersaetze füllen. Außerdem wollen wir noch die Spaltenüberschriften anpassen. Das erledigen wir mit den folgenden Erweiterungen, wobei wir erst die Daten für die Kombinationsfelder in der Code behind-Klasse verfügbar machen. Dazu fügen wir zwei private Variablen für die Listen der Kategorien und der Mehrwertsteuersätze hinzu:
Private m_Kategorien As List(Of Kategorie) Private m_Mehrwertsteuersaetze As List(Of Mehrwertsteuersatz)
Für beide richten wir entsprechende öffentliche Eigenschaften ein: