Exemplarische Vorgehensweise: Anzeigen von Daten aus einer SQL Server-Datenbank in einem DataGrid-Steuerelement

In dieser exemplarischen Vorgehensweise rufen Sie Daten aus einer SQL Server-Datenbank ab und zeigen diese Daten in einem DataGrid-Steuerelement an. Sie verwenden das ADO.NET Entity Framework, um die Entitätsklassen zu erstellen, die die Daten darstellen, und verwenden Sie LINQ, um eine Abfrage zu schreiben, die die angegebenen Daten aus einer Entitätsklasse abruft.

Voraussetzungen

Zum Abschließen dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

  • Visual Studio.

  • Zugriff auf eine laufende Instanz von SQL Server oder SQL Server Express, an die eine AdventureWorksLT-Beispieldatenbank angefügt ist. Sie können die AdventureWorks-Datenbank aus dem GitHub herunterladen.

Erstellen neuer Entitätsklassen.

  1. Erstellen Sie ein neues WPF-Anwendungsprojekt in Visual Basic oder C# mit dem Namen DataGridSQLExample.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, zeigen Sie auf Hinzufügen, und wählen Sie Neues Element aus.

    Das Dialogfeld Neues Element hinzufügen wird angezeigt.

  3. Wählen Sie im Bereich Installierte Vorlagen Daten und in der Liste der Vorlagen ADO.NET Entity Data Model aus.

    ADO.NET Entity Data Model item template

  4. Nennen Sie die Datei AdventureWorksModel.edmx, und klicken Sie dann auf Hinzufügen.

    Der Assistent für Entity Data Model wird angezeigt.

  5. Wählen Sie im Bildschirm Modellinhalt auswählen die Option EF Designer aus Datenbank aus, und klicken Sie anschließend auf Weiter.

  6. Geben Sie auf dem Bildschirm "Datenverbindung auswählen" die Verbindung zu Ihrer AdventureWorksLT2008-Datenbank an. Weitere Informationen finden Sie im Dialogfeld Datenverbindung auswählen.

    Stellen Sie sicher, dass der Name AdventureWorksLT2008Entities und das Kontrollkästchen Einstellungen Entitätsverbindung in App.Config speichern als ausgewählt ist, und klicken Sie dann auf Weiter.

  7. Erweitern Sie im Bildschirm "Datenbankobjekte auswählen" den Knoten "Tabellen" und wählen Sie die Tabellentabellen Produkt und ProductCategory aus.

    Sie können Entitätsklassen für alle Tabellen generieren; In diesem Beispiel rufen Sie jedoch nur Daten aus diesen beiden Tabellen ab.

    Select Product and ProductCategory from tables

  8. Klicken Sie auf Fertig stellen.

    Die Entitäten "Product" und "ProductCategory" werden im Entitäts-Designer angezeigt.

    Product and ProductCategory entity models

Abrufen und Präsentieren der Daten

  1. Öffnen Sie die Datei "MainWindow.xaml".

  2. Legen Sie die Width-Eigenschaft von Window auf 450 fest.

  3. Fügen Sie im XAML-Editor das folgende DataGrid-Tag zwischen den <Grid>- und </Grid>-Tags hinzu, um einen DataGrid mit Namen dataGrid1hinzuzufügen.

    <DataGrid Name="dataGrid1" />
    

    Window with DataGrid

  4. Wählen Sie Window aus.

  5. Erstellen Sie mithilfe des Eigenschaftenfenster- oder XAML-Editors einen Ereignishandler für das Window mit dem Namen Window_Loaded für das Loaded-Ereignis. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines einfachen Ereignishandlers.

    Im folgenden Beispiel wird der XAML-Code für MainWindow.xaml angezeigt.

    Hinweis

    Wenn Sie Visual Basic verwenden, ersetzen Sie x:Class="DataGridSQLExample.MainWindow" in der ersten Zeile von MainWindow.xaml durch x:Class="MainWindow".

    <Window x:Class="DataGridSQLExample.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="450" 
            Loaded="Window_Loaded">
        <Grid>
            <DataGrid Name="dataGrid1" />
        </Grid>
    </Window>
    
  6. Öffnen Sie die Codebehind-Datei (MainWindow.xaml.vb oder MainWindow.xaml.cs) für die Window.

  7. Fügen Sie den folgenden Code hinzu, um nur bestimmte Werte aus den verknüpften Tabellen abzurufen und die ItemsSource-Eigenschaft der DataGrid auf die Ergebnisse der Abfrage festzulegen.

    using System.Data.Entity.Core.Objects;
    using System.Linq;
    using System.Windows;
    
    namespace DataGridSQLExample
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            AdventureWorksLT2008Entities dataEntities = new AdventureWorksLT2008Entities();
    
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                var query =
                from product in dataEntities.Products
                where product.Color == "Red"
                orderby product.ListPrice
                select new { product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice };
    
                dataGrid1.ItemsSource = query.ToList();
            }
        }
    }
    
    Imports System.Data.Objects
    
    Class MainWindow
        Dim dataEntities As AdventureWorksLT2008Entities = New AdventureWorksLT2008Entities
    
        Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
            Dim products As ObjectQuery(Of Product) = dataEntities.Products
    
            Dim query = _
                From product In products _
                Where product.Color = "Red" _
                Order By product.ListPrice _
                Select product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice
    
            dataGrid1.ItemsSource = query.ToList()
        End Sub
    End Class
    
  8. Führen Sie das Beispiel aus.

    Sie sollten eine DataGrid sehen, die Daten anzeigt.

    DataGrid with data from SQL database

Weitere Informationen