Freigeben über


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:

Erstellen des Projekts

Erstellen Sie ein neues WPF-Projekt zum Anzeigen von Produktdatensätzen.

  1. Öffnen Sie Visual Studio.

  2. Wählen Sie im Startfenster Neues Projekt erstellen aus.

  3. 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.

  1. Klicken Sie im Menü Daten auf Datenquellen anzeigen.

    Das Fenster Datenquellen wird geöffnet.

  2. Klicken Sie im Datenquellenfenster auf Neue Datenquelle hinzufügen.

    Der Assistent zum Konfigurieren von Datenquellen wird geöffnet.

  3. Wählen Sie auf der Seite Datenquellentyp auswählen die Option Datenbank aus, und wählen Sie dann Weiter aus.

  4. Wählen Sie auf der Seite Ein Datenbankmodell auswählen die Option DataSet aus, und wählen Sie anschließend Weiter aus.

  5. 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.

  6. 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.

  7. Erweitern Sie auf der Seite Datenbankobjekte auswählen den Punkt Tabellen, und wählen Sie dann die Tabelle Product (SalesLT) aus.

  8. 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. Die AdventureWorksLTDataSet.xsd-Datei definiert ein typisiertes Dataset namens AdventureWorksLTDataSet und ein TableAdapter-Element mit dem Namen ProductTableAdapter. Weiter unten in dieser exemplarischen Vorgehensweise verwenden Sie ProductTableAdapter für das Füllen des Datasets mit Daten und speichern die Änderungen zurück in die Datenbank.

  9. 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.

  1. Öffnen Sie im Projektmappen-Explorer die Datei AdventureWorksLTDataSet.xsd.

    Der DataSet-Designer wird geöffnet.

  2. Klicken Sie die Abfrage Fill, GetData() mit der rechten Maustaste, und wählen Sie Konfigurieren aus.

    Der TableAdapter-Konfigurations-Assistent wird geöffnet.

  3. Fügen Sie auf der Seite SQL-Anweisung eingeben die folgende WHERE-Klausel nach der SELECT-Anweisung im Textfeld ein.

    WHERE ThumbnailPhotoFileName <> 'no_image_available_small.gif'
    
  4. 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.

  1. Doppelklicken Sie im Projektmappen-Explorer auf MainWindow.xaml.

    Das Fenster wird automatisch im WPF-Designer geöffnet.

  2. 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">&lt;</Button>
    <Button HorizontalAlignment="Left" Margin="116,20,0,24" Name="nextButton" Width="75">&gt;</Button>
    <Button HorizontalAlignment="Right" Margin="0,21,46,24" Name="saveButton" Width="110">Save changes</Button>
    
  3. 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.

  1. Klicken Sie im Datenquellenfenster das Dropdownlistenmenü für den Knoten Product, und klicken Sie auf Details.

  2. Erweitern Sie den Product-Knoten.

  3. 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

  4. 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.

  5. 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.

  6. Klicken Sie im Designer auf das Textfeld neben der Bezeichnung Product ID.

  7. Aktivieren Sie im Fenster Eigenschaften das Kontrollkästchen neben der Eigenschaft IsReadOnly.

Fügen Sie Code hinzu, mit dessen Hilfe Benutzer durch die Produktdatensätze scrollen können, indem Sie die Schaltflächen < und > verwenden.

  1. 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.

  2. Ändern Sie den Window_Loaded-Ereignishandler, sodass ProductViewSource, AdventureWorksLTDataSet und AdventureWorksLTDataSetProductTableAdapter 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 des Window_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();
    }
    
  3. Fügen Sie dem backButton_Click -Ereignishandler folgenden Code hinzu:

    if (productViewSource.View.CurrentPosition > 0)
    {
        productViewSource.View.MoveCurrentToPrevious();
    }
    
  4. Kehren Sie zum Designer zurück, und doppelklicken Sie auf die >-Schaltfläche.

  5. Fügen Sie dem nextButton_Click -Ereignishandler folgenden Code hinzu:

    if (productViewSource.View.CurrentPosition < ((CollectionView)productViewSource.View).Count - 1)
    {
        productViewSource.View.MoveCurrentToNext();
    }
    

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.

  1. 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.

  2. Fügen Sie dem saveButton_Click -Ereignishandler folgenden Code hinzu:

    adventureWorksLTDataSetProductTableAdapter.Update(AdventureWorksLTDataSet.Product);
    

    Hinweis

    In diesem Beispiel wird die Methode Save des TableAdapter 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 Methode UpdateAll des TableAdapterManager 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.

  1. 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.

  2. Ändern Sie in einem der Datensätze im Feld Größe den Wert, und wählen Sie anschließend Änderungen speichern aus.

  3. Schließen Sie die Anwendung, und starten Sie dann die Anwendung in Visual Studio erneut, indem Sie F5 drücken.

  4. Navigieren Sie zum Produktdatensatz, den Sie geändert haben und prüfen Sie, ob die Änderung gespeichert wurde.

  5. Schließen Sie die Anwendung.

Nächste Schritte

Nach Abschluss dieser exemplarischen Vorgehensweise können Sie folgende Aufgaben ausführen: