news 2026/8/29 13:13:56

界面控件DevExpress WPF Scheduler控件 - 如何实现数据的按需加载?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
界面控件DevExpress WPF Scheduler控件 - 如何实现数据的按需加载?

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

DevExpress新旧版本帮助文档下载可进QQ qun获取:169725316

在v20.2版本中,技术团队为WPF Scheduler控件添加了按需数据加载支持,本文将为大家介绍如何使用WPF Scheduler的API在WPF应用程序中配置数据加载逻辑。

性能影响

按需从源中获取数据是一种常用技术,可以缩短具有大型数据集的应用程序的启动时间。 为了帮助您估算收益,我们测量了 Scheduler 控件加载计划所需的时间:

这些测量没有考虑从源加载数据项所花费的时间,对于速度较慢的数据库和服务,仅加载部分数据的性能提升会更高。

按需加载入门指南

要启用按需数据加载,您必须处理 DataSource.FetchAppointments 事件(时间区域有一个单独的 DataSource.FetchTimeRegions 事件)。 当您处理这些事件时,DevExpress WPF Scheduler仅在其当前可见的时间间隔内加载数据,当用户从一个时间段导航到另一个时间段时,我们的WPF Scheduler会从数据源中查询更多信息(根据需要),缓存加载的数据以减少查询频率。

为了进一步降低查询频率,WPF Scheduler将加载数据的时间间隔扩展到 DataSource.FetchRange 属性值,默认FetchRange为1个月。旦用户滚动超出此范围,Scheduler只会重新计算此时间间隔:

实现

以下代码示例演示了如何为DbContext数据源引入按需数据加载:

// Data context public class SchedulingDataContext : DbContext { public SchedulingDataContext() : base(CreateConnection(), true) { } static DbConnection CreateConnection() { //... } // Data items public DbSet<AppointmentEntity> AppointmentEntities { get; set; } //... } // Event implementation void dataSource_FetchAppointments(object sender, DevExpress.Xpf.Scheduling.FetchDataEventArgs e) { // Pass data objects to the event's Result property e.Result = dbContext.AppointmentEntities.Where( // The search query. // Use the item's QueryStart and QueryEnd properties to calculate the correct interval // as they take recurrence patterns into account. // The event's Interval property returns the time interval for which to load data objects. // Its value is the SchedulerControl.VisibleIntervals extended to the DataSource.FetchRange property value in both directions. x => x.QueryStart <= e.Interval.End && x.QueryEnd >= e.Interval.Start) .ToArray(); }

此代码段中的 Where 方法的参数是一个基本的搜索查询,不涉及过滤,您可以改用 FetchDataEventArgs.GetFetchExpression 方法来简化实现:

void FetchAppointments(FetchDataEventArgs e) { e.Result = dbContext.AppointmentEntities .Where(e.GetFetchExpression<AppointmentEntity>()).ToArray(); }

同步Scheduler和源

要同步数据源和Scheduler(部分加载数据),您需要手动保存更改,内置的 CRUD 事件简化了这一要求,可以为所有四个事件编写一个处理程序:

<dxsch:SchedulerControl AppointmentAdded="ProcessChanges" AppointmentEdited="ProcessChanges" AppointmentRemoved="ProcessChanges" AppointmentRestored="ProcessChanges"/> void ProcessChanges(object sender, AppointmentCRUDEventArgs e) { db.Appointments.AddRange(e.AddToSource.Select(x => (Appointment)x.SourceObject)); db.Appointments.RemoveRange(e.DeleteFromSource.Select(x => (Appointment)x.SourceObject)); db.SaveChanges(); }

如果您想了解有关按需数据加载的更多信息,并且您的计算机上安装了​​​​​​​DevExpress WPF组件,请单击下面的链接以启动我们的示例演示:

数据按需加载演示:dxdemo://Wpf/DXScheduling/MainDemo/OnDemandDataLoading

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

MII模式下CRS信号处理实战:以LAT1595为例的完整指南

1. 为什么MII模式下的CRS信号成了“烫手山芋”做嵌入式网络开发的朋友应该都有过这种经历&#xff1a;硬件原理图上明明把PHY的CRS、COL引脚连到了MAC&#xff0c;软件里配的也是标准的MII模式&#xff0c;可跑起来就是不对——要么收包错乱&#xff0c;要么系统偶尔卡死&#…

作者头像 李华
网站建设 2026/8/29 13:13:20

Blender 3.5.0 M1 Max渲染实测:Metal加速与性能优化指南

简介&#xff1a;GPU渲染已成为三维创作领域的效率关键&#xff0c;尤其在苹果自研芯片Mac上&#xff0c;Metal后端的技术演进让M1系列设备的图形算力得以真正释放。Blender作为开源免费的跨平台三维软件&#xff0c;其内置Cycles渲染器在3.5.0版本中对Apple Silicon的原生支持…

作者头像 李华
网站建设 2026/8/29 13:08:51

VMWare虚拟机安装WIN10/11 GHO版

很多小伙伴好奇&#xff1a;虚拟机怎么装GHO格式系统&#xff1f;在VMware虚拟机中装原版ISO镜像很简单&#xff0c;但装GHO/WIM镜像可能就蒙圈了。然后就有了这个教程。本教程讲述如何 在虚拟机内安装 GHO/WIM镜像。1.前期准备VMware虚拟机16.1.2 &#xff08;目前只有这个版…

作者头像 李华
网站建设 2026/8/29 13:08:44

Vue3间距(Space)

效果如下图&#xff1a; 在线预览 APIs Space 参数说明类型默认值width区域总宽度&#xff0c;单位 pxstring | number‘auto’align垂直排列方式‘stretch’ | ‘start’ | ‘end’ | ‘center’ | ‘baseline’‘start’vertical是否为垂直布局booleanfalsegap间距大小&am…

作者头像 李华
网站建设 2026/8/29 13:07:45

2017好未来秋招算法笔试题复盘:栈、DP、贪心、二叉树全解析

又是一年秋招季&#xff0c;最近好几个学弟学妹跑来问我&#xff0c;说想看去年的笔试题练练手&#xff0c;尤其是教育科技这一块的公司。我翻了一下网盘&#xff0c;正好还留着2017年好未来秋招技术岗的笔试题目记录&#xff0c;这套题放在今天看依然很能打&#xff0c;考点覆…

作者头像 李华