EDM: DataGrid als Datenblatt

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.

DataGrid mit den Daten der Tabelle Produkte

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:

 

Schreibe einen Kommentar