Пошаговое руководство. Отображение данных из базы данных SQL Server в элементе управления DataGrid
В этом пошаговом руководстве будет выполняться извлечение данных из базы данных SQL Server и отображение их в элементе управления DataGrid. С помощью Entity Framework ADO.NET создаются классы сущностей, которые представляют данные, а с помощью LINQ пишется запрос, извлекающий указанные данные из класса сущностей.
Обязательные компоненты
Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.
Visual Studio 2010.
Доступ к работающему экземпляру SQL Server или SQL Server Express с подключенной демонстрационной базой данных AdventureWorksLT2008. Базу данных AdventureWorksLT2008 можно загрузить с веб-сайта CodePlex.
Создание классов сущностей
Создайте новый проект приложения WPF на языке Visual Basic или C# с именем DataGridSQLExample.
В обозревателе решений щелкните правой кнопкой мыши проект, переведите указатель на пункт Добавить и выберите команду Создать элемент.
Откроется диалоговое окно Добавление нового элемента.
В области установленных шаблонов выберите Данные, затем в списке шаблонов выберите ADO.NET Entity Data Model.
Назовите файл AdventureWorksModel.edmx, а затем нажмите кнопку Добавить.
Появится мастер модели EDM.
На экране выбора содержимого модели выберите Создать из базы данных и нажмите кнопку Далее.
В экране выбора подключения данных предоставьте подключение к базе данных AdventureWorksLT2008. Дополнительные сведения см. в статье Диалоговое окно выбора подключения данных (статья может быть на английском языке).
Удостоверьтесь, что имя задано как AdventureWorksLT2008Entities, и что установлен флажок Сохранить настройки подключения сущности в App.Config как, и нажмите кнопку Далее.
В экране выбора объектов базы данных разверните узел "Таблицы" и выберите таблицы Product и ProductCategory.
Можно создать классы сущностей для всех таблиц; в этом примере извлекаются данные только из этих двух таблиц.
Нажмите кнопку Готово.
Сущности Product и ProductCategory отображаются в конструкторе сущностей.
Извлечение и представление данных
Откройте файл MainWindow.xaml.
В редакторе XAML добавьте следующий тег DataGrid между тегами <Grid> и </Grid>, чтобы добавить DataGrid с именем dataGrid1.
<DataGrid Name="dataGrid1" />
Выберите Window.
С помощью окна свойств или редактора 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>
Откройте файл кода программной части (MainWindow.xaml.vb или MainWindow.xaml.cs) для Window.
Добавьте следующий код, чтобы извлечь из присоединенных таблиц только указанные значения и установить в качестве значения свойства 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(); } } }
Запустите пример.
Должен появиться элемент управления DataGrid, отображающий данные.
См. также
Ссылки
Другие ресурсы
How Do I: Get Started with Entity Framework in WPF Applications?