DevExpress中文网站 > 最新资讯 > DevExpress SchedulerControl怎么创建周期日程 DevExpress SchedulerControl周期规则不生效如何调整
教程中心分类
DevExpress SchedulerControl怎么创建周期日程 DevExpress SchedulerControl周期规则不生效如何调整
发布时间:2026/08/28 16:00:39

  在DevExpress SchedulerControl中,周期日程并不是把同一条预约复制多份,而是保存一条Pattern类型的主日程,再根据RecurrenceInfo中的周期规则动态生成Occurrence。创建时如果只设置开始时间和周期类型,却遗漏Pattern类型、周期范围或数据字段映射,就容易出现日程只显示一次、周期次数不正确或重新加载后规则消失。围绕“DevExpress SchedulerControl怎么创建周期日程DevExpress SchedulerControl周期规则不生效如何调整”,需要同时检查日程类型、RecurrenceInfo和数据绑定。

  一、DevExpress SchedulerControl怎么创建周期日程

 

  SchedulerControl中的周期规则保存在Appointment.RecurrenceInfo中,可以设置按天、周、月、年、小时或分钟重复,并通过Range控制周期结束方式。

 

  1、创建周期日程对象

 

  ①通过schedulerControl.DataStorage.CreateAppointment创建Appointment,并设置开始时间、结束时间和Subject。

 

  ②将Appointment.Type设置为AppointmentType.Pattern。Pattern负责保存整个周期系列的规则,本身不会作为普通日程重复显示。

 

  ③获取appointment.RecurrenceInfo,设置Type、Start、Periodicity和周期范围。

 

  ④配置完成后,将Appointment加入schedulerControl.DataStorage.Appointments。

 

  例如创建一个每周一重复、共执行10次的日程,可以按下面的方式设置:

  RecurrenceInfo.Type决定按什么时间单位重复,Periodicity则控制间隔,例如Weekly配合Periodicity为2表示每两周重复一次。

 

  2、正确设置周期结束条件

 

  ①需要永久重复时,将Range设置为RecurrenceRange.NoEndDate。

 

  ②需要按照次数结束时,设置为RecurrenceRange.OccurrenceCount,同时填写OccurrenceCount。

 

  ③需要在指定日期结束时,设置为RecurrenceRange.EndByDate,并填写End。

 

  ④修改范围后重新检查其他字段,因为不同Range只读取与自身对应的结束参数。

 

  例如Range为OccurrenceCount时,End不会决定周期结束时间;Range为EndByDate时,OccurrenceCount也不会生效。

 

  二、DevExpress SchedulerControl周期规则不生效如何调整

 

  周期规则不生效时,先判断是“从来没有生成周期实例”,还是“第一次正常,保存并重新加载后失效”。前者通常属于规则设置问题,后者更应该检查数据库字段映射。

  1、检查Appointment类型

 

  ①查看周期主日程的Type是否为AppointmentType.Pattern。

 

  ②如果仍然是AppointmentType.Normal,即使填写了RecurrenceInfo,也应重新按周期日程方式创建。

 

  ③不要手工把每个Occurrence添加到Appointments集合。Occurrence是根据Pattern动态生成的,并不会作为普通周期实例逐条保存在集合中。

 

  ④需要修改整组日程时修改Pattern;只修改某一天时,再建立ChangedOccurrence异常实例。

 

  2、检查RecurrenceInfo的开始时间和范围

 

  ①确认RecurrenceInfo.Start位于实际需要生成周期日程的日期范围内。

 

  ②检查SchedulerControl当前视图显示的日期。如果周期从9月开始,而当前停留在8月,看不到日程并不代表规则失效。

 

  ③使用EndByDate时,确认End晚于Start;使用OccurrenceCount时,确认次数大于0。

 

  ④检查WeekDays、Month、DayNumber等参数是否与当前RecurrenceType匹配。

 

  RecurrenceInfo.Start定义整个周期范围的起点,结束位置则由Range及其对应参数决定。

 

  3、检查数据绑定字段

 

  数据库绑定模式下,周期日程第一次创建正常,重新打开程序后变成普通日程,通常要重点检查Mappings。

 

  ①检查Appointment数据表是否有保存日程类型和周期规则的字段。

 

  ②在Appointments的Mappings中,将对应字段映射到Type和RecurrenceInfo。

 

  ③确认RecurrenceInfo字段能够保存完整规则字符串,数据库字段长度过短时可能出现内容截断。

 

  ④修改数据库数据后,如果没有自动重新加载,执行SchedulerDataStorage.RefreshData()刷新。

 

  绑定模式会通过Mappings在数据源字段与Appointment属性之间同步数据,其中包括日程类型和周期信息。

 

  4、检查修改和删除的单次日程

 

  周期中的某一次日程被单独修改后,会成为ChangedOccurrence;被删除后则成为DeletedOccurrence。这些异常实例会覆盖原本由Pattern计算出来的Occurrence。

 

  ①获取当前Pattern对应的异常实例,检查目标日期是否已经存在ChangedOccurrence或DeletedOccurrence。

 

  ②某一次日程被误修改时,可以调用RestoreOccurrence()恢复为普通Occurrence。

 

  ③修改整个周期规则后,重新检查以前建立的单次修改是否仍符合当前业务要求。

 

  ④数据库存储异常实例时,还要保证Pattern与异常日程之间的关联字段完整,避免重新加载后无法找到对应周期系列。

 

  三、如何稳定维护SchedulerControl周期日程

 

  周期日程投入实际项目后,建议把Pattern和单次异常分开处理,不要直接生成大量普通Appointment模拟周期效果。

 

  1、按固定顺序验证

 

  ①先在非绑定模式创建一个简单的每日周期,确认SchedulerControl能够正常生成多个Occurrence。

 

  ②再增加Weekly、Monthly等复杂规则,检查Periodicity和WeekDays。

 

  ③随后接入数据库,重点验证程序关闭并重新启动后周期规则是否仍然存在。

 

  ④最后测试修改单次、删除单次和修改整个系列,确认异常实例处理正确。

 

  2、区分规则问题和数据显示问题

 

  周期规则正确但界面没有显示时,还要检查资源筛选、时间范围和数据刷新。尤其使用Resource时,如果Appointment映射了错误的ResourceId,日程可能已经生成,只是没有显示在当前资源下。没有使用资源功能时,也应避免错误映射ResourceId字段。

  总结

 

  处理“DevExpress SchedulerControl怎么创建周期日程DevExpress SchedulerControl周期规则不生效如何调整”时,应先使用Pattern类型建立主日程,再通过RecurrenceInfo配置周期类型、开始时间、间隔和结束范围。规则不生效时,重点检查AppointmentType、Range对应参数、RecurrenceInfo数据映射以及ChangedOccurrence和DeletedOccurrence。把周期规则与单次异常分开维护,可以减少日程重复、规则丢失和重新加载后显示异常的问题。希望本文对大家使用DevExpress SchedulerControl管理周期日程有所帮助,如需进一步了解相关软件与开发应用,可联系咨询。

135 2431 0251