Binden von WPF-Steuerelementen an ein Dataset in .NET Framework-Anwendungen
Hinweis
Datasets und verwandte Klassen sind ältere .NET-Technologien aus den frühen 2000er Jahren, die es Anwendungen ermöglichen, mit Daten im Arbeitsspeicher zu arbeiten, während die Anwendungen von der Datenbank getrennt sind. Die Technologien sind besonders nützlich für Anwendungen, die es Benutzern ermöglichen, Daten zu ändern und die Änderungen wieder in der Datenbank zu speichern. Obwohl sich Datasets als sehr erfolgreiche Technologie erwiesen haben, empfehlen wir, dass neue .NET-Anwendungen Entity Framework Core verwenden. Entity Framework bietet eine natürlichere Möglichkeit, mit tabellarischen Daten als Objektmodelle zu arbeiten, und verfügt über eine einfachere Programmierschnittstelle.
In dieser exemplarischen Vorgehensweise erstellen Sie eine WPF-Anwendung, die datengebundene Steuerelemente enthält. Die Steuerelemente sind an Produktdatensätze gebunden, die in einem Dataset gekapselt sind. Außerdem fügen Sie Schaltflächen hinzu, mit denen es möglich ist, Produkte zu durchsuchen und Änderungen an Produktdatensätzen zu speichern.
In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:
Erstellen einer WPF-Anwendung und eines Datasets, das aus Daten in der Beispieldatenbank AdventureWorksLT generiert wird.
Erstellen mehrerer datengebundener Steuerelemente durch Ziehen einer Datentabelle aus dem Datenquellenfenster zu einem Fenster im WPF-Designer.
Erstellen von Schaltflächen, mit denen die Navigation vorwärts und rückwärts durch die Produktdatensätze möglich ist.
Erstellen einer Schaltfläche, die Änderungen durch Kunden an den Produktdatensätzen in der Tabelle und der darunterliegenden Datenquelle speichert.
Hinweis
Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in diesem Artikel. Möglicherweise verwenden Sie eine andere Edition von Visual Studio oder andere Umgebungseinstellungen. Weitere Informationen finden Sie unter Personalisieren der IDE.
Voraussetzungen
Zum Abschließen dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:
Für dieses Tutorial müssen die Workloads .NET-Desktopentwicklung und Datenspeicherung und -verarbeitung in Visual Studio installiert sein. Um diese zu installieren, öffnen Sie Visual Studio-Installer und wählen Ändern (oder Weitere>Ändern) neben der Version von Visual Studio aus, die Sie ändern möchten. Weitere Informationen finden Sie im Artikel Ändern von Visual Studio durch Hinzufügen oder Entfernen von Arbeitsauslastungen und Komponenten.
Zugriff auf eine laufende Instanz von SQL Server oder SQL Server Express, an die eine AdventureWorksLT-Beispieldatenbank (AdventureWorks Light) angefügt ist. Informationen zum Herunterladen der Datenbank finden Sie unter AdventureWorks-Beispieldatenbanken.
Vorkenntnisse der folgenden Konzepte sind ebenfalls hilfreich, wenn auch für die Durchführung der exemplarischen Vorgehensweise nicht erforderlich:
DataSets und TableAdapters. Weitere Informationen finden Sie unter Datasettools in Visual Studio und TableAdapters.
WPF-Datenbindung. Weitere Informationen finden Sie unter Übersicht über Datenbindung.
Erstellen des Projekts
Erstellen Sie ein neues WPF-Projekt zum Anzeigen von Produktdatensätzen.
Öffnen Sie Visual Studio.
Wählen Sie im Startfenster Neues Projekt erstellen aus.
Suchen Sie nach der C#-Projektvorlage WPF-App, und führen Sie die Schritte zum Erstellen des Projekts aus. Nennen Sie es AdventureWorksProductsEditor.
Visual Studio erstellt das Projekt „AdventureWorksProductsEditor“.
Erstellen eines Datasets für die Anwendung
Ehe Sie datengebundene Steuerelemente erstellen können, müssen Sie ein Datenmodell für die Anwendung definieren und es dem Datenquellenfenster hinzufügen. In dieser exemplarischen Vorgehensweise erstellen Sie ein Dataset als Datenmodell.
Klicken Sie im Menü Daten auf Datenquellen anzeigen.
Das Fenster Datenquellen wird geöffnet.
Klicken Sie im Datenquellenfenster auf Neue Datenquelle hinzufügen.
Der Assistent zum Konfigurieren von Datenquellen wird geöffnet.
Wählen Sie auf der Seite Datenquellentyp auswählen die Option Datenbank aus, und wählen Sie dann Weiter aus.
Wählen Sie auf der Seite Ein Datenbankmodell auswählen die Option DataSet aus, und wählen Sie anschließend Weiter aus.
Wählen Sie auf der Seite Wählen Sie Ihre Datenverbindung aus eine der folgenden Optionen aus:
Wenn in der Dropdownliste eine Datenverbindung zur Beispieldatenbank „AdventureWorksLT“ verfügbar ist, wählen Sie diese aus, und wählen Sie anschließend Weiter aus.
Klicken Sie Neue Verbindung, und erstellen Sie eine Verbindung zur Datenbank AdventureWorksLT.
Wählen Sie auf der Seite Verbindungszeichenfolge in der Anwendungskonfigurationsdatei speichern das Kontrollkästchen Ja, Verbindung speichern unter, und wählen Sie anschließend Weiter aus.
Erweitern Sie auf der Seite Datenbankobjekte auswählen den Punkt Tabellen, und wählen Sie dann die Tabelle Product (SalesLT) aus.
Klicken Sie auf Fertig stellen.
Visual Studio fügt dem Projekt eine neue
AdventureWorksLTDataSet.xsd
-Datei hinzu, und dem Fenster Datenquellen wird ein entsprechendes AdventureWorksLTDataSet-Element hinzugefügt. DieAdventureWorksLTDataSet.xsd
-Datei definiert ein typisiertes Dataset namensAdventureWorksLTDataSet
und ein TableAdapter-Element mit dem NamenProductTableAdapter
. Weiter unten in dieser exemplarischen Vorgehensweise verwenden SieProductTableAdapter
für das Füllen des Datasets mit Daten und speichern die Änderungen zurück in die Datenbank.Erstellen Sie das Projekt.
Bearbeiten der TableAdapter-Standardfüllungsmethode
Verwenden Sie zum Füllen des Datasets die Fill
-Methode des ProductTableAdapter
. Standardmäßig füllt die Fill
-Methode die ProductDataTable
im AdventureWorksLTDataSet
mit allen Datenzeilen aus der Product-Tabelle. Sie können diese Methode modifizieren, sodass nur eine Teilmenge von Zeilen zurückgeben wird. Ändern Sie für diese exemplarische Vorgehensweise die Fill
-Methode, sodass nur Zeilen für Produkte zurückgegeben werden, die Fotos haben.
Öffnen Sie im Projektmappen-Explorer die Datei AdventureWorksLTDataSet.xsd.
Der DataSet-Designer wird geöffnet.
Klicken Sie die Abfrage Fill, GetData() mit der rechten Maustaste, und wählen Sie Konfigurieren aus.
Der TableAdapter-Konfigurations-Assistent wird geöffnet.
Fügen Sie auf der Seite SQL-Anweisung eingeben die folgende
WHERE
-Klausel nach derSELECT
-Anweisung im Textfeld ein.WHERE ThumbnailPhotoFileName <> 'no_image_available_small.gif'
Klicken Sie auf Fertig stellen.
Definieren der Benutzeroberfläche
Fügen Sie dem Fenster eine Reihe von Schaltflächen hinzu, indem Sie XAML im WPF-Designer ändern. Später in dieser exemplarischen Vorgehensweise fügen Sie dann Code hinzu, mit dem Anwender durch Produktdatensätze blättern und Änderungen daran mithilfe dieser Schaltflächen speichern können.
Doppelklicken Sie im Projektmappen-Explorer auf MainWindow.xaml.
Das Fenster wird automatisch im WPF-Designer geöffnet.
Fügen Sie in der XAML-Ansicht des Designers den folgenden Code zwischen den
<Grid>
-Tags hinzu:<Grid.RowDefinitions> <RowDefinition Height="75" /> <RowDefinition Height="625" /> </Grid.RowDefinitions> <Button HorizontalAlignment="Left" Margin="22,20,0,24" Name="backButton" Width="75"><</Button> <Button HorizontalAlignment="Left" Margin="116,20,0,24" Name="nextButton" Width="75">></Button> <Button HorizontalAlignment="Right" Margin="0,21,46,24" Name="saveButton" Width="110">Save changes</Button>
Erstellen Sie das Projekt.
Erstellen Sie datengebundene Steuerelemente.
Erstellen Sie Steuerelemente zum Anzeigen der Kundedatensätze, indem Sie die Product
-Tabelle aus dem Fenster Datenquellen in den WPF-Designer ziehen.
Klicken Sie im Datenquellenfenster das Dropdownlistenmenü für den Knoten Product, und klicken Sie auf Details.
Erweitern Sie den Product-Knoten.
In diesem Beispiel werden einige Felder nicht angezeigt. Klicken Sie also das Dropdownlistenmenü neben den folgenden Knoten, und wählen Sie Keine:
ProductCategoryID
ProductModelID
ThumbnailPhotoFileName
rowguid
ModifiedDate
Klicken Sie auf das Dropdownlistenmenü neben dem Knoten-ThumbNailPhoto, und wählen Sie Bild aus.
Hinweis
Standardmäßig haben Elemente im Fenster Datenquellen, die Bilder repräsentieren, als Steuerelementsatz Kein ausgewählt. Dies ist deshalb so, weil Bilder als Bytearrays in Datenbanken gespeichert werden und alles enthalten können, von einer einfachen Array an Bytes bis zur ausführbaren Datei einer großen Anwendung.
Ziehen Sie aus dem Fenster Datenquellen den Knoten Product auf das Raster unter der Zeile, in der die Schaltflächen sind.
Visual Studio erzeugt XAML, der mehrere Steuerelemente definiert, die an Daten in der Tabelle Products gebunden sind. Es generiert außerdem Code, der die Daten lädt. Weitere Informationen zu den generierten XAML-Elementen und dem Code finden Sie unter Binden von WPF-Steuerelementen an Daten in Visual Studio.
Klicken Sie im Designer auf das Textfeld neben der Bezeichnung Product ID.
Aktivieren Sie im Fenster Eigenschaften das Kontrollkästchen neben der Eigenschaft IsReadOnly.
Navigieren in Produktdatensätzen
Fügen Sie Code hinzu, mit dessen Hilfe Benutzer durch die Produktdatensätze scrollen können, indem Sie die Schaltflächen < und > verwenden.
Doppelklicken Sie im Designer die Schaltfläche < auf der Fensteroberfläche.
Visual Studio öffnet die CodeBehind-Datei und erstellt einen neuen
backButton_Click
-Ereignishandler für das Click-Ereignis.Ändern Sie den
Window_Loaded
-Ereignishandler, sodassProductViewSource
,AdventureWorksLTDataSet
undAdventureWorksLTDataSetProductTableAdapter
sich außerhalb der Methode befinden und für das gesamte Formular zugänglich sind. Deklarieren Sie nur diese als global für das Formular, und weisen Sie sie innerhalb desWindow_Loaded
-Ereignishandlers wie folgt zu:private AdventureWorksProductsEditor.AdventureWorksLTDataSet AdventureWorksLTDataSet; private AdventureWorksProductsEditor.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter adventureWorksLTDataSetProductTableAdapter; private System.Windows.Data.CollectionViewSource productViewSource; private void Window_Loaded(object sender, RoutedEventArgs e) { AdventureWorksLTDataSet = ((AdventureWorksProductsEditor.AdventureWorksLTDataSet)(this.FindResource("adventureWorksLTDataSet"))); // Load data into the table Product. You can modify this code as needed. adventureWorksLTDataSetProductTableAdapter = new AdventureWorksProductsEditor.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter(); adventureWorksLTDataSetProductTableAdapter.Fill(AdventureWorksLTDataSet.Product); productViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("productViewSource"))); productViewSource.View.MoveCurrentToFirst(); }
Fügen Sie dem
backButton_Click
-Ereignishandler folgenden Code hinzu:Kehren Sie zum Designer zurück, und doppelklicken Sie auf die >-Schaltfläche.
Fügen Sie dem
nextButton_Click
-Ereignishandler folgenden Code hinzu:
Speichern von Änderungen an Produktdatensätzen
Fügen Sie Code hinzu, mit dem Benutzer Änderungen an Product Records mithilfe der Taste Änderungen speichern speichern können.
Doppelklicken Sie im Designer auf die Schaltfläche Änderungen speichern.
Visual Studio öffnet die CodeBehind-Datei und erstellt einen neuen
saveButton_Click
-Ereignishandler für das Click-Ereignis.Fügen Sie dem
saveButton_Click
-Ereignishandler folgenden Code hinzu:Hinweis
In diesem Beispiel wird die Methode
Save
desTableAdapter
für das Speichern von Änderungen verwendet. Das ist in dieser exemplarischen Vorgehensweise angebracht, denn es wird nur eine Datentabelle geändert. Wenn Sie Änderungen an mehreren Datentabellen speichern möchten, können Sie alternativ die MethodeUpdateAll
desTableAdapterManager
einsetzen, die Visual Studio mit dem Dataset generiert. Weitere Informationen finden Sie unter TableAdapters.
Testen der App
Erstellen Sie die Anwendung, und führen Sie sie aus. Stellen Sie sicher, dass Sie Produktdatensätze anzeigen und ändern können.
Drücken Sie F5.
Die Anwendung wird erstellt und ausgeführt. Überprüfen Sie Folgendes:
Die Textfelder zeigen Daten aus dem ersten Produktdatensatz, der ein Foto hat. Dieses Produkt hat die ID 713 und heißt Long-Sleeve Logo Jersey, S.
Sie können auf die Schaltflächen > oder < für die Navigation durch andere Produktdatensätze klicken.
Ändern Sie in einem der Datensätze im Feld Größe den Wert, und wählen Sie anschließend Änderungen speichern aus.
Schließen Sie die Anwendung, und starten Sie dann die Anwendung in Visual Studio erneut, indem Sie F5 drücken.
Navigieren Sie zum Produktdatensatz, den Sie geändert haben und prüfen Sie, ob die Änderung gespeichert wurde.
Schließen Sie die Anwendung.
Nächste Schritte
Nach Abschluss dieser exemplarischen Vorgehensweise können Sie folgende Aufgaben ausführen:
Erfahren Sie, wie Sie das Datenquellenfenster in Visual Studio für die Bindung von WPF-Steuerelementen an andere Typen von Datenquellen verwenden. Weitere Informationen finden Sie unter Binden von WPF-Steuerelementen an einen WCF-Datendienst.
Erfahren Sie, wie Sie das Datenquellenfenster in Visual Studio für die Anzeige zugehöriger Daten (das heißt, Daten in einer Beziehung zwischen übergeordneten und untergeordneten Daten) in WPF-Steuerelementen verwenden. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Anzeigen zugehöriger Daten in einer WPF-App.