Поделиться через


Пошаговое руководство. Отображение данных из базы данных SQL Server в элементе управления DataGrid

В этом пошаговом руководстве вы извлекаете данные из базы данных SQL Server и отображаете эти данные в элементе управления DataGrid. С помощью ADO.NET Entity Framework создайте классы сущностей, представляющие данные, и используйте LINQ для написания запроса, который извлекает указанные данные из класса сущностей.

Предпосылки

Для выполнения этого пошагового руководства требуются следующие компоненты:

  • Visual Studio.

  • Доступ к запущенному экземпляру SQL Server или SQL Server Express с примером базы данных AdventureWorks, подключенной к ней. Базу данных AdventureWorks можно скачать из GitHub.

Создание классов сущностей

  1. Создайте проект приложения WPF в Visual Basic или C#, а затем назовите его DataGridSQLExample.

  2. В обозревателе решений щелкните проект правой кнопкой мыши, выберите пункт Добавить, а затем выберите Новый элемент.

    Откроется диалоговое окно "Добавить новый элемент".

  3. В области установленных шаблонов выберите Data и в списке шаблонов выберите модель данных объектов сущностей ADO.NET.

    элемент шаблона модели данных сущности ADO.NET

  4. Присвойте файлу имя AdventureWorksModel.edmx и нажмите кнопку Добавить.

    Откроется конструктор модели данных сущностей.

  5. На экране выбора содержимого модели выберите EF Designer из базы данных и нажмите Далее.

  6. На экране выбора подключения к данным укажите подключение к базе данных AdventureWorksLT2008. Дополнительные сведения см. в диалоговом окне Выбор подключения к данным.

    Убедитесь, что имя AdventureWorksLT2008Entities, установите флажок Сохранить параметры подключения сущности в App.Config как, а затем нажмите кнопку Далее.

  7. На экране "Выбор объектов базы данных" разверните узел "Таблицы" и выберите таблицы Product и ProductCategory.

    Можно создать классы сущностей для всех таблиц; Однако в этом примере вы извлекаете данные только из этих двух таблиц.

    Выбор продукта и категории продукта из таблиц

  8. Нажмите кнопку Готово.

    Сущности Product и ProductCategory отображаются в конструкторе сущностей.

    модели сущностей Product и ProductCategory

Получение и представление данных

  1. Откройте файл MainWindow.xaml.

  2. Установите значение свойства Width на объекте Window равным 450.

  3. В редакторе XAML добавьте следующий тег DataGrid между тегами <Grid> и </Grid>, чтобы добавить DataGrid с именем dataGrid1.

    <DataGrid Name="dataGrid1" />
    

    окно с DataGrid

  4. Выберите Window.

  5. С помощью окна свойств или редактора XAML создайте обработчик событий для Window с именем Window_Loaded для события Loaded. Дополнительные сведения см. в разделе Практическое руководство. Создание простого обработчика событий.

    Ниже показан XAML для MainWindow.xaml.

    Замечание

    Если вы используете Visual Basic, в первой строке MainWindow.xaml замените 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. Откройте файл программной части (MainWindow.xaml.vb или MainWindow.xaml.cs) для Window.

  7. Добавьте следующий код, чтобы получить только определенные значения из присоединенных таблиц и установить свойство ItemsSource объекта DataGrid на результаты запроса.

    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. Запустите пример.

    Вы увидите DataGrid, в котором отображаются данные.

    DataGrid с данными из базы данных SQL

См. также