行业资讯
📅 2026/7/14 13:37:31
DevExpress WPF中文教程:Grid - 如何向项目添加GridControl并绑定到数据
DevExpress WPF拥有120个控件和库将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品还是以数据为中心的商业智能产品都能通过DevExpress WPF控件来实现。DevExpress新旧版本帮助文档下载可进QQ qun获取169725316本教程演示了如何将GridControl添加到项目中并将控件绑定到数据库1. 使用DevExpress Template Gallery模板库来创建一个新的Blank MVVM Application空白MVVM应用程序这个项目模版包含了一个样板View Model类并设置MainView的数据上下文2. 将项目连接到本地数据库示例如下Blank .NET 6 App with the Northwind Database 。3. 将GridControl工具箱项添加到MainView如果您的项目没有DevExpress.Wpf.Grid.Core.v23.2引用Visual Studio将显示以下消息此消息通知您已添加所需的引用并要求再次添加控件。提示如果您从NuGet源而不是从统一组件安装程序中获取DevExpress产品则工具箱中不包含DevExpress控件除非您添加相应的NuGet包。跳转到Tools | NuGet Package Manager | Manage NuGet Packages for Solution然后添加DevExpress.Wpf.Grid NuGet包。4. 选择GridControl然后调用它的Quick Actions快捷操作菜单单击Bind to a Data Source来启动Items Source Wizard项目源向导5. 选择一个数据源选择要在GridControl中显示的表选择Simple Binding模型确保启用了CRUD选项选择View Model选项在View Model中生成数据绑定代码。确认MainViewModel类被选择为View Model6. Items Source Wizard项目源向导生成以下代码MainView.xamldxg:GridControl x:Namegrid AutoGenerateColumnsAddNew EnableSmartColumnsGenerationTrue ItemsSource{Binding ItemsSource} RestoreStateKeyFieldNameOrderId RestoreStateOnSourceChangeTrue dxg:GridControl.TotalSummary dxg:GridSummaryItem AlignmentRight SummaryTypeCount/ /dxg:GridControl.TotalSummary dxg:GridControl.InputBindings KeyBinding Command{Binding View.Commands.DeleteFocusedRow, ElementNamegrid} KeyDelete/ /dxg:GridControl.InputBindings dxg:GridControl.View dxg:TableView NewItemRowPositionTop ShowUpdateRowButtonsOnCellEditorOpen ValidateRowCommand{Binding ValidateRowCommand} ValidateRowDeletionCommand{Binding ValidateRowDeletionCommand} DataSourceRefreshCommand{Binding DataSourceRefreshCommand} ShowFixedTotalSummaryTrue/ /dxg:GridControl.View dxg:GridColumn FieldNameOrderId IsSmartTrue ReadOnlyTrue/ dxg:GridColumn FieldNameCustomerId IsSmartTrue/ dxg:GridColumn FieldNameEmployeeId IsSmartTrue/ dxg:GridColumn FieldNameOrderDate IsSmartTrue/ dxg:GridColumn FieldNameRequiredDate IsSmartTrue/ dxg:GridColumn FieldNameShippedDate IsSmartTrue/ dxg:GridColumn FieldNameShipVia IsSmartTrue/ dxg:GridColumn FieldNameFreight IsSmartTrue/ dxg:GridColumn FieldNameShipName IsSmartTrue/ dxg:GridColumn FieldNameShipAddress IsSmartTrue/ dxg:GridColumn FieldNameShipCity IsSmartTrue/ dxg:GridColumn FieldNameShipRegion IsSmartTrue/ dxg:GridColumn FieldNameShipPostalCode IsSmartTrue/ dxg:GridColumn FieldNameShipCountry IsSmartTrue/ /dxg:GridControlMainViewModel.csusing DevExpress.Mvvm; using System; using WPF_DataGrid_GetStarted.Models; using DevExpress.Mvvm.DataAnnotations; using System.Linq; using System.Collections.Generic; using DevExpress.Mvvm.Xpf; namespace WPF_DataGrid_GetStarted.ViewModels { public class MainViewModel : ViewModelBase { NorthwindEntities _Context; IListOrder _ItemsSource; public IListOrder ItemsSource { get { if (_ItemsSource null !DevExpress.Mvvm.ViewModelBase.IsInDesignMode) { _Context new NorthwindEntities(); _ItemsSource _Context.Orders.ToList(); } return _ItemsSource; } } [Command] public void ValidateRow(RowValidationArgs args) { var item (Order)args.Item; if (args.IsNewItem) _Context.Orders.Add(item); _Context.SaveChanges(); } [Command] public void ValidateRowDeletion(ValidateRowDeletionArgs args) { var item (Order)args.Items.Single(); _Context.Orders.Remove(item); _Context.SaveChanges(); } [Command] public void DataSourceRefresh(DataSourceRefreshArgs args) { _ItemsSource null; _Context null; RaisePropertyChanged(nameof(ItemsSource)); } } }MainViewModel.vbImports DevExpress.Mvvm Imports System Imports WPF_DataGrid_GetStarted.Models Imports DevExpress.Mvvm.DataAnnotations Imports System.Linq Imports System.Collections.Generic Imports DevExpress.Mvvm.Xpf Namespace WPF_DataGrid_GetStarted.ViewModels Public Class MainViewModel Inherits ViewModelBase Private _Context As NorthwindEntities Private _ItemsSource As IList(Of Order) Public ReadOnly Property ItemsSource As IList(Of Order) Get If _ItemsSource Is Nothing AndAlso Not DevExpress.Mvvm.ViewModelBase.IsInDesignMode Then _Context New NorthwindEntities() _ItemsSource _Context.Orders.ToList() End If Return _ItemsSource End Get End Property Command Public Sub ValidateRow(ByVal args As RowValidationArgs) Dim item CType(args.Item, Order) If args.IsNewItem Then _Context.Orders.Add(item) _Context.SaveChanges() End Sub Command Public Sub ValidateRowDeletion(ByVal args As ValidateRowDeletionArgs) Dim item CType(args.Items.Single(), Order) _Context.Orders.Remove(item) _Context.SaveChanges() End Sub Command Public Sub DataSourceRefresh(ByVal args As DataSourceRefreshArgs) _ItemsSource Nothing _Context Nothing RaisePropertyChanged(NameOf(ItemsSource)) End Sub End Class End Namespace这段代码启用CRUD操作为所有数据源字段生成列并在固定的汇总面板中显示总行数。7. 运行项目