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


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

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

Обязательные компоненты

Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.

  • Visual Studio 2010.

  • Доступ к работающему экземпляру SQL Server или SQL Server Express с подключенной демонстрационной базой данных AdventureWorksLT2008. Базу данных AdventureWorksLT2008 можно загрузить с веб-сайта CodePlex.

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

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

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

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

  3. В области установленных шаблонов выберите Данные, затем в списке шаблонов выберите ADO.NET Entity Data Model.

    Выбор модели EDM ADO.NET

  4. Назовите файл AdventureWorksModel.edmx, а затем нажмите кнопку Добавить.

    Появится мастер модели EDM.

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

    Выбор параметра создания из базы данных

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

    Предоставление подключения к базе данных

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

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

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

    Выбор пунктов Product и ProductCategory из таблиц

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

    Сущности 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, замените код x:Class="DataGridSQLExample.MainWindow" в первой строке файла MainWindow.xaml кодом x:Class="MainWindow".

    <Window x:Class="DataGridSQLExample.MainWindow"
            xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="https://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 результат запроса.

    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
    
    using System.Data.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)
            {
                ObjectQuery<Product> products = dataEntities.Products;
    
                var query =
                from product in products
                where product.Color == "Red"
                orderby product.ListPrice
                select new { product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice };
    
                dataGrid1.ItemsSource = query.ToList();
            }
        }
    }
    
  8. Запустите пример.

    Должен появиться элемент управления DataGrid, отображающий данные.

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

См. также

Ссылки

DataGrid

Другие ресурсы

How Do I: Get Started with Entity Framework in WPF Applications?