Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Als selbständiger oder freiberuflicher Softwareentwickler braucht man am Ende vor allem eines: eine Anwendung zum Erstellen von Rechnungen. Diese wollen wir im vorliegenden Artikel programmieren – vom Entwurf des Datenmodells über die Erstellung des Entity Data Models und die Benutzeroberfläche bis zum Ausdrucken der Rechnung als PDF oder mit dem Drucker.
Funktionen der Rechnungsverwaltung
Welche Aufgaben wollen wir mit der Rechnungsverwaltung erledigen – welche Eingangsdaten haben wir, was soll am Ende herauskommen Und welche Funktionen bilden wir dabei mit der Benutzeroberfläche ab
Wir wollen eine kleine Anwendung bauen, die verschiedene Funktionen über das Ribbon anbietet. Dazu gehören die Verwaltung von Rechnungsempfängern und der Rechnungen selbst. Für die Rechnungsempfänger wollen wir eine Übersicht der vorhandenen Kunden in Listenform anbieten und ein Fenster zum Anlegen eines neuen Kunden. Die Seite zum Anlegen eines Kunden wollen wir auch für die Detailansicht dieses Kunden nutzen. Praktisch ist dann, wenn wir direkt die Rechnungen, die bisher für diesen Kunden erstellt wurden, in einer Liste in dieser Ansicht anzeigen. Außerdem soll das Fenster jeweils eine Schaltfläche zum Anlegen einer neuen Rechnung enthalten und eine zum Ausdrucken einer markierten Rechnung.
Für die Rechnungen wollen wir ebenfalls ein eigenes Fenster vorsehen. Dieses enthält Steuer-elemente zur Eingabe der allgemeinen Daten einer Rechnung, also Rechnungsdatum, Rechnungsbetreff, Rechnungstext und Rechnungsuntertext. Außerdem soll ein Listensteuerelement alle Rechnungspositionen mit Bezeichnung, Nettobetrag, Menge und Mehrwertsteuersatz anzeigen.
Schließlich fehlt noch die Ausgabe der Rechnung – diese wollen wir über ein FlowDocument realisieren, das in einem entsprechenden Steuer-element in einem eigenen Fenster angezeigt wird und ausgedruckt oder als PDF gespeichert werden kann.
Datenmodell der Anwendung
Das Datenmodell haben wir, wenn wir schon im Artikel Access zu EDM: Dateien erstellen (www.datenbankentwickler.net/219) eine kleine Funktion zum Erstellen eines Entity Data Models programmiert haben, schnell mit Access definiert (siehe Bild 1). Wir verwenden eine Tabelle namens tblKunden, welche die üblichen Kundendaten enthält. Die Anreden speichern wir in einer eigenen Tabelle namens tblAnreden, die von der Tabelle tblKunden aus über das Feld AnredeID referenziert wird. Die grundlegenden Rechnungsdaten speichern wir in der Tabelle tblRechnungen. Hier finden Sie das Rechnungsdatum und die übrigen Informationen, die in der Rechnung rund um die Auflistung der Rechnungspositionen abgebildet werden. Außerdem enthält die Rechnungstabelle ein Fremdschlüsselfeld namens KundeID, mit dem der Kunde zur jeweiligen Rechnung festgelegt wird. Schließlich folgen noch die Rechnungspositionen in der Tabelle tblRechnungspositionen. Die einzelnen Positionen sind über das Feld RechnungID mit der Tabelle tblRechnungen verknüpft.
Bild 1: Datenmodell der Rechnungsverwaltung
Achtung: Damit das nachfolgende Erstellen des Entity Data Models funktioniert, müssen die Primärschlüsselfelder die Entität im Namen enthalten, bei Kunde also beispielsweise KundeID.
Entity Data Model erstellen
Mit dem folgenden Aufruf der Funktion EDMDateienErstellen legen wir im Unterverzeichnis RechnungsverwaltungContext der Access-Datenbank einige Verzeichnisse und Dateien an, die wir gleich im Anschluss weiterverarbeiten:
EDMDateienErstellen False, "RechnungsverwaltungContext", "DataModel", True, True
Zuvor erstellen wir noch ein neues Visual Studio-Projekt mit der Vorlage Visual Basic|Windows Desktop|WPF-App namens Rechnungsverwaltung.
Nun öffnen wir mit dem Kontextmenü-Eintrag Hinzufügen|Neues Element… des Projekt-Elements im Projektmappen-Explorer den Dialog Neues Element hinzufügen, wählen dort das Element ADO.NET Entity Data Model aus und geben dafür den Namen RechnungsverwaltungContext ein.
Im folgenden Schritt wählen wir den Eintrag Leeres Code First-Modell aus (siehe Bild 2).
Bild 2: Typ des Modells auswählen
Danach ziehen Sie den Inhalt aus dem soeben von Access aus erstellten Ordner RechnungsverwaltungContext (alle enthaltenen Elemente, nicht den Ordner selbst) auf das Projekt-Element Rechnungsverwaltung. Dies ersetzt die Datei RechnungsverwaltungContext.vb, was sich Visual Studio mit der Meldung aus Bild 3 bestätigen lässt.
Bild 3: Überschreiben der Datei bestätigen
Mit einer weiteren Meldung bestätigen Sie außerdem, dass die extern geänderten Elemente in Visual Studio neu geladen werden sollen.
Datenbank erstellen
Wenn Sie jetzt noch in der Paket-Manager-Konsole über den Menüeintrag Extras|Nuget-Paket-Manager|Paket-Manager-Konsole die folgenden beiden Befehle aufrufen, wird auch noch eine SQL Server-Datenbank auf Basis des Entity Data Models erstellt, die wir im weiteren Verlauf benötigen:
add-migration init update-database
Danach finden Sie die Datenbank im SQL Server-Objekt-Explorer vor und können gleichzeitig über das Entity Data Model auf die enthaltenen Daten zugreifen beziehungsweise neue Daten schreiben.
Ribbon der Anwendung
Damit wir die einzelnen Bereiche der Anwendung öffnen können, fügen wir dem Fenster Main.xaml ein Ribbon hinzu. Dazu müssen wir zunächst einen Verweis hinzufügen (Menüeintrag Projekt|Verweis hinzufügen…), und zwar auf die Bibliothek System.Windows.Controls.Ribbon (siehe Bild 4). Danach fügen wir dem Code des Fensters Main.xaml die folgende Ribbon-Definition hinzu: