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.
Erstellen Sie ein neues WPF-Anwendungsprojekt in Visual Basic oder C# mit dem Namen
DataGridSQLExample
.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.
Wählen Sie im Bereich Installierte Vorlagen Daten und in der Liste der Vorlagen ADO.NET Entity Data Model aus.
Nennen Sie die Datei
AdventureWorksModel.edmx
, und klicken Sie dann auf Hinzufügen.Der Assistent für Entity Data Model wird angezeigt.
Wählen Sie im Bildschirm Modellinhalt auswählen die Option EF Designer aus Datenbank aus, und klicken Sie anschließend auf Weiter.
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.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.
Klicken Sie auf Fertig stellen.
Die Entitäten "Product" und "ProductCategory" werden im Entitäts-Designer angezeigt.
Abrufen und Präsentieren der Daten
Öffnen Sie die Datei "MainWindow.xaml".
Fügen Sie im XAML-Editor das folgende DataGrid-Tag zwischen den
<Grid>
- und</Grid>
-Tags hinzu, um einen DataGrid mit NamendataGrid1
hinzuzufügen.<DataGrid Name="dataGrid1" />
Wählen Sie Window aus.
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 durchx: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>
Öffnen Sie die Codebehind-Datei (MainWindow.xaml.vb oder MainWindow.xaml.cs) für die Window.
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
Führen Sie das Beispiel aus.
Sie sollten eine DataGrid sehen, die Daten anzeigt.