Пошаговое руководство. Отображение данных из базы данных SQL Server в элементе управления DataGrid
В этом пошаговом руководстве выполняется получение данных из базы данных SQL Server и их отображение в элементе управления DataGrid. С помощью ADO.NET Entity Framework можно создавать классы сущностей, представляющих данные, и использовать LINQ для записи запроса, который выполняет получение указанных данных из класса сущности.
Необходимые компоненты
Для выполнения этого пошагового руководства требуются следующие компоненты:
Visual Studio.
Доступ к запущенному экземпляру SQL Server или SQL Server Express с подключенной учебной базой данных AdventureWorks. Базу данных AdventureWorks можно загрузить из GitHub.
Создание новых классов сущностей
Создайте проект приложения WPF на Visual Basic или C# с именем
DataGridSQLExample
.В обозревателе решений щелкните проект правой кнопкой мыши, выберите сначала Добавить, а затем Новый элемент.
Откроется диалоговое окно Добавление нового элемента.
В области "Установленные шаблоны" выберите Данные и в списке шаблонов выберите ADO.NET EDM (модель данных с использованием сущностей).
Назовите файл
AdventureWorksModel.edmx
, а затем щелкните Добавить.Появится мастер модели EDM.
На экране «Выбор содержимого модели» выберите Конструктор EF из базы данных, а затем нажмите кнопку Далее.
На экране «Выбор подключения к данным» укажите подключение к базе данных 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, в первой строке 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>
Откройте файл кода программной части (MainWindow.xaml.vb или MainWindow.xaml.cs) для элемента Window.
Добавьте следующий код, чтобы получать только определенные значения из объединенных таблиц, и назначьте свойство 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
Запустите пример.
Должен отображаться элемент DataGrid с данными.
См. также
.NET Desktop feedback
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по