Genomgång: Visa data från en SQL Server-databas i en DataGrid-kontroll

I den här genomgången hämtar du data från en SQL Server-databas och visar dessa data i en DataGrid kontroll. Du använder ADO.NET Entity Framework för att skapa entitetsklasserna som representerar data och använda LINQ för att skriva en fråga som hämtar angivna data från en entitetsklass.

Förutsättningar

Du behöver följande komponenter för att slutföra den här genomgången:

  • Visual Studio.

  • Åtkomst till en instans av SQL Server eller SQL Server Express som har AdventureWorks-exempeldatabasen kopplad till sig. Du kan ladda ned AdventureWorks-databasen från GitHub-.

Skapa entitetsklasser

  1. Skapa ett nytt WPF-programprojekt i Visual Basic eller C# och ge det namnet DataGridSQLExample.

  2. Högerklicka på projektet i Solution Explorer, peka på Lägg tilloch välj sedan Nytt objekt.

    Dialogrutan Lägg till nytt objekt visas.

  3. I fönstret Installerade mallar väljer du Data och i listan med mallar väljer du ADO.NET Entitetsdatamodell.

    ADO.NET objektmall för entitetsdatamodell

  4. Ge filen namnet AdventureWorksModel.edmx och klicka sedan på Lägg till.

    Guiden för Entitetsdatamodellen visas.

  5. På skärmen Välj modellinnehåll väljer du EF Designer från databas och klickar sedan på Nästa.

  6. På skärmen Välj dataanslutning anger du anslutningen till databasen AdventureWorksLT2008. Mer information finns i dialogrutan Välj dataanslutning.

    Kontrollera att namnet är AdventureWorksLT2008Entities och att kryssrutan Spara entitetsanslutning i App.Config som är markerad och klicka sedan på Nästa.

  7. På skärmen Välj databasobjekt expanderar du noden Tabeller och väljer tabellerna Product och ProductCategory.

    Du kan generera entitetsklasser för alla tabeller. Men i det här exemplet hämtar du bara data från dessa två tabeller.

    Välj produkt och produktKategori från tabeller

  8. Klicka på Finish.

    Entiteterna Product och ProductCategory visas i Entitetsdesignern.

    Produkt- och ProductCategory-entitetsmodeller

Hämta och presentera data

  1. Öppna filen MainWindow.xaml.

  2. Ange egenskapen WidthWindow till 450.

  3. I XAML-redigeraren lägger du till följande DataGrid-tagg mellan taggarna <Grid> och </Grid> för att lägga till en DataGrid med namnet dataGrid1.

    <DataGrid Name="dataGrid1" />
    

    fönster med DataGrid

  4. Välj Window.

  5. Använd fönstret Egenskaper eller XAML-redigeraren och skapa en händelsehanterare för Window med namnet Window_Loaded för händelsen Loaded. För mer information, se Så här: skapa en enkel händelsehanterare.

    Följande visar XAML för MainWindow.xaml.

    Anmärkning

    Om du använder Visual Basic ersätter du x:Class="DataGridSQLExample.MainWindow" med x:Class="MainWindow"på den första raden i MainWindow.xaml.

    <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. Öppna kodfilen (MainWindow.xaml.vb eller MainWindow.xaml.cs) för Window.

  7. Lägg till följande kod för att hämta endast specifika värden från de anslutna tabellerna och ange egenskapen ItemsSource för DataGrid till resultatet av frågan.

    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.Linq
    
    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 query = _
                From product In dataEntities.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. Kör exemplet.

    Du ska kunna se en DataGrid som visar data.

    DataGrid med data från SQL Database

Se även