news 2026/7/7 8:15:10

DevExpress WPF中文教程:Data Grid - 如何绑定到有限制的自定义服务(一)?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DevExpress WPF中文教程:Data Grid - 如何绑定到有限制的自定义服务(一)?

DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。

本文将演示如何将GridControl绑定到有限制的自定义服务(例如,不兼容的过滤器和排序),由于内容较多,我们将分为几篇文章来阐述,欢迎持续关注我们哟~

获取DevExpress WPF v25.1正式版下载

Step 1:获取数据并启用滚动

在此步骤中,您将创建一个虚拟源,从服务中获取行,并在GridControl中启用滚动。

注意:在本教程中,使用Issues Service作为数据源的示例。

获取数据和启用滚动

1. 添加一个GridControl,列对应于Issues Service的IssueData到您的项目窗口:

XAML

<dxg:GridControl x:Name="grid" > <dxg:GridControl.Columns> <dxg:GridColumn FieldName="Subject" /> <dxg:GridColumn FieldName="User" /> <dxg:GridColumn FieldName="Created" /> <dxg:GridColumn FieldName="Votes" /> <dxg:GridColumn FieldName="Tags" /> </dxg:GridControl.Columns> </dxg:GridControl>

注意GridControl不能显示Tags列的值,因为IssueData.Tags属性的类型是一个字符串数组。

2. 初始化虚拟源:

  • 创建一个虚拟源(本教程中的InfiniteAsyncSource)。
  • 创建自定义Tags属性并将字符串数组转换为单个字符串-逗号分隔的标签列表(参见CreateTagsProperty方法)。
  • 指定VirtualSourceBase.CustomProperties属性。

C#

public MainWindow() { InitializeComponent(); var source = new InfiniteAsyncSource() { CustomProperties = GetCustomProperties() }; } static DynamicPropertyDescriptor CreateTagsProperty() { return new DynamicPropertyDescriptor( name: "Tags", propertyType: typeof(string), getValue: x => string.Join(", ", ((IssueData)x).Tags)); } static PropertyDescriptorCollection GetCustomProperties() { var customProperties = TypeDescriptor.GetProperties(typeof(IssueData)) .Cast<PropertyDescriptor>() .Where(x => x.Name != "Tags") .Concat(new[] { CreateTagsProperty() }) .ToArray(); return new PropertyDescriptorCollection(customProperties); }

3. 处理虚拟源:

  • 处理窗口的Unloaded事件。
  • 调用VirtualSourceBase.Dispose方法。

C#

public MainWindow() { // ... Unloaded += (o, e) => { source.Dispose(); }; }

4. 从数据源获取行:

  • 处理InfiniteAsyncSource.FetchRows事件。
  • 使用 Issues Service的GetIssuesAsync方法获取数据。
  • 创建FetchRowsResult类对象并指定FetchRowsAsyncEventArgs.Result属性。

C#

public MainWindow() { // ... source.FetchRows += (o, e) => { e.Result = FetchRowsAsync(e); }; } static async Task<FetchRowsResult> FetchRowsAsync(FetchRowsAsyncEventArgs e) { IssueSortOrder sortOrder = GetIssueSortOrder(e); IssueFilter filter = MakeIssueFilter(e.Filter); const int pageSize = 30; var issues = await IssuesService.GetIssuesAsync( page: e.Skip / pageSize, pageSize: pageSize, sortOrder: sortOrder, filter: filter); return new FetchRowsResult(issues, hasMoreRows: issues.Length == pageSize); } static IssueSortOrder GetIssueSortOrder(FetchRowsAsyncEventArgs e) { return IssueSortOrder.Default; } static IssueFilter MakeIssueFilter(CriteriaOperator filter) { return null; }

通过将生成的虚拟源实例赋值给DataControlBase.ItemsSource属性,将GridControl绑定到虚拟源:

C#

public MainWindow() { // ... grid.ItemsSource = source; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 7:53:54

【软件工程与应用】平移置换搬迁系统设计与实现

导读&#xff1a; 我国的城镇化进程正在进入存量更新和提质增效的关键阶段&#xff0c;其中在特大城市和大城市的老城平房街区则因为“共生院”问题很难在传统更新模式下实现院落高效开发。针对某一老街区的平移置换需求&#xff0c;本研究构建了系统性的规划方案&#xff1a;…

作者头像 李华
网站建设 2026/7/7 12:54:55

10、基于Open vSwitch构建虚拟交换基础设施

基于Open vSwitch构建虚拟交换基础设施 1. TCI与VLAN标签 TCI(Tag Control Information)是802.1q报头中的一个2字节字段。对于带有802.1q报头的数据包,该字段包含VLAN信息,包括VLAN ID;对于没有802.1q报头(即未标记)的数据包,vlan_tci值设置为零(0x0000)。在扁平网…

作者头像 李华
网站建设 2026/7/7 7:09:40

DeepSeek-V3.2开源:中国大模型改写全球AI竞争格局

导语 【免费下载链接】DeepSeek-V3.2-Exp-Base 项目地址: https://ai.gitcode.com/hf_mirrors/deepseek-ai/DeepSeek-V3.2-Exp-Base 中国AI公司深度求索&#xff08;DeepSeek&#xff09;发布的开源大模型DeepSeek-V3.2系列&#xff0c;以其突破性的稀疏注意力技术和接…

作者头像 李华
网站建设 2026/7/7 3:33:41

高性能RPC框架内存优化:从碎片危机到极致性能的3步指南

在百万级QPS的高并发场景下&#xff0c;brpc框架如何解决内存碎片这一"性能瓶颈"&#xff1f;传统内存分配器在高频分配释放中产生的碎片&#xff0c;不仅拖慢响应速度&#xff0c;更会耗尽系统资源。本文将带您深入探索brpc的内存优化方案&#xff0c;从核心痛点出发…

作者头像 李华
网站建设 2026/7/7 4:56:09

健身房预约|基于springboot + vue健身房预约小程序系统(源码+数据库+文档)

健身房预约小程序 目录 基于springboot vue健身房预约小程序系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue健身房预约小程序系统 一、前言 博…

作者头像 李华