Przewodnik: wyświetlanie danych z bazy danych programu SQL Server w kontrolce DataGrid

W tym przewodniku dane są pobierane z bazy danych programu SQL Server i wyświetlane w kontrolce DataGrid . Użyjesz ADO.NET Entity Framework, aby utworzyć klasy jednostek, które reprezentują dane, i użyć LINQ do zapisania zapytania pobierającego określone dane z klasy jednostki.

Wymagania wstępne

Następujące składniki są wymagane do przeprowadzenia tego instruktażu:

  • Programu Visual Studio.

  • Dostęp do uruchomionego wystąpienia programu SQL Server lub programu SQL Server Express z dołączoną przykładową bazą danych AdventureWorks. Bazę danych AdventureWorks można pobrać z usługi GitHub.

Tworzenie klas jednostek

  1. Utwórz nowy projekt aplikacji WPF w Visual Basic lub C#i nadaj mu DataGridSQLExamplenazwę .

  2. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt, wskaż polecenie Dodaj, a następnie wybierz pozycję Nowy element.

    Zostanie wyświetlone okno dialogowe Dodawanie nowego elementu.

  3. W okienku Zainstalowane szablony wybierz pozycję Dane i na liście szablonów wybierz pozycję ADO.NET Entity Data Model.

    ADO.NET Entity Data Model item template

  4. Nadaj plikowi AdventureWorksModel.edmx nazwę, a następnie kliknij przycisk Dodaj.

    Zostanie wyświetlony Kreator modelu Entity Data Model.

  5. Na ekranie Wybieranie zawartości modelu wybierz pozycję EF Projektant z bazy danych, a następnie kliknij przycisk Dalej.

  6. Na ekranie Wybieranie danych Połączenie ion podaj połączenie z bazą danych AdventureWorksLT2008. Aby uzyskać więcej informacji, zobacz Wybieranie Połączenie ion danych okno dialogowe.

    Upewnij się, że nazwa to AdventureWorksLT2008Entities i czy zaznaczono pole wyboru Zapisz ustawienia połączenia jednostki w pliku App.Config , a następnie kliknij przycisk Dalej.

  7. Na ekranie Wybieranie obiektów bazy danych rozwiń węzeł Tabele i wybierz tabele Product i ProductCategory .

    Można wygenerować klasy jednostek dla wszystkich tabel; jednak w tym przykładzie dane są pobierane tylko z tych dwóch tabel.

    Select Product and ProductCategory from tables

  8. Kliknij przycisk Finish (Zakończ).

    Jednostki Product i ProductCategory są wyświetlane w Projektant jednostki.

    Product and ProductCategory entity models

Pobieranie i prezentowanie danych

  1. Otwórz plik MainWindow.xaml.

  2. Width Ustaw właściwość na Window wartość 450.

  3. W edytorze XAML dodaj następujący DataGrid tag między tagami <Grid> i </Grid> , aby dodać nazwany DataGriddataGrid1element .

    <DataGrid Name="dataGrid1" />
    

    Window with DataGrid

  4. Wybierz aplikację Window.

  5. Za pomocą edytora okno Właściwości lub XAML utwórz program obsługi zdarzeń dla Window nazwy Window_Loaded zdarzeniaLoaded. Aby uzyskać więcej informacji, zobacz Jak utworzyć prostą procedurę obsługi zdarzeń.

    Poniżej przedstawiono kod XAML dla pliku MainWindow.xaml.

    Uwaga

    Jeśli używasz języka Visual Basic, w pierwszym wierszu pliku MainWindow.xaml zastąp ciąg x:Class="DataGridSQLExample.MainWindow" .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. Otwórz plik code-behind (MainWindow.xaml.vb lub MainWindow.xaml.cs) dla pliku Window.

  7. Dodaj następujący kod, aby pobrać tylko określone wartości ze sprzężonych tabel i ustawić ItemsSource właściwość na DataGrid wyniki zapytania.

    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. Uruchom przykład.

    Powinien zostać wyświetlony element DataGrid , który wyświetla dane.

    DataGrid with data from SQL database

Zobacz też