Log In
Home
Support
Demos
Documentation
Blogs
Training
Webinars
[Expand]General Information
[Expand]WinForms Controls
[Collapse]ASP.NET Controls and MVC Extensions
 [Expand]Prerequisites
 [Expand]What's Installed
 [Expand]Common Concepts
 [Collapse]ASP.NET WebForms Controls
  [Expand]Reporting
  [Expand]Chart Control
  [Expand]Grid View
  [Expand]Card View
  [Expand]Vertical Grid
  [Expand]Spreadsheet
  [Expand]Rich Text Editor
  [Expand]Image and Data Browsing
  [Expand]Docking and Popups
  [Expand]Site Navigation and Layout
  [Expand]File Management
  [Expand]Multi-Use Site Controls
  [Collapse]Scheduler
   [Expand]Product Information
    Getting Started
   [Expand]Fundamentals
   [Collapse]Concepts
    [Expand]Scheduler Elements
    [Collapse]Appointments
      What Is an Appointment
      Appointment Labels and Statuses
      Recurring Appointments and Exceptions
      Reminders for Appointments
    [Expand]Resources
    [Expand]Views
     Data Binding
    [Expand]Services
     Adaptivity
     Templates
     Client-Side Functionality
     Callback Commands
    [Expand]Reporting
     Time Zones
     Keyboard Shortcuts
   [Expand]Visual Elements
   [Expand]Design-Time Features
   [Expand]Examples
   [Expand]End-User Capabilities
   [Expand]Member Tables
  [Expand]HTML Editor
  [Expand]Pivot Grid
  [Expand]Tree List
  [Expand]Gauges
  [Expand]Data Editors
  [Expand]Spell Checker
  [Expand]Query Builder
 [Expand]ASP.NET MVC Extensions
 [Expand]Localization
 [Expand]Redistribution and Deployment
  Get More Help
 [Expand]API Reference
[Expand]ASP.NET Bootstrap Controls
[Expand]ASP.NET Core Bootstrap Controls
[Expand]WPF Controls
[Expand]Xamarin Controls
[Expand]Windows 10 App Controls
[Expand]Document Server
[Expand]Reporting
[Expand]Report Server
[Expand]Dashboard
[Expand]eXpressApp Framework
[Expand]CodeRush
[Expand]CodeRush Classic
[Expand]Cross-Platform Core Libraries
[Expand]Tools and Utilities
 End-User Documentation

Recurring Appointments and Exceptions

This document introduces the main concepts behind the creation and use of recurring appointments in your scheduling application. The ASPxScheduler can generate end-user appointments based on the daily, weekly, monthly, or yearly recurrence pattern, either with an end condition or without any end date. You're also able to create exceptions to these recurring series, and this makes the recurring appointments more useful in real scheduling applications.

Expanded Non-Recurring and Recurring Appointments

All appointments maintained by the XtraScheduler can either be simple (non-recurring), occurring only once in the specified time interval (represented via Appointment.Start and Appointment.End properties), or recurring, occurring many times in the same time interval. Whether an appointment is recurring or not is identified by the Appointment.IsRecurring value.

Recurring appointments can be of different types. Note that the type of any particular appointment is accessed via its Appointment.Type property. The following image demonstrates the possible types of recurring appointments.

A recurring appointment can either be a base (a Pattern), or an occurrence. Occurring appointments can either be a simple Occurrence, or an exception (a ChangedOccurrence or a DeletedOccurrence). The following sections describe the differences between these recurring appointments.

Expanded Base Recurring Appointment and Recurrence Pattern

Every series of recurring appointment is specified by its base appointment (Pattern), returned by the Appointment.RecurrencePattern property of all other appointments in the series. The Pattern appointment contains information about a recurrence. Actually, it sets the start date and time of the recurrence series and specifies a rule according to which a series is repeated. This recurrence rule is accessed via the pattern's Appointment.RecurrenceInfo property.

The Pattern appointment is stored in the ASPxSchedulerStorage.Appointments collection of the ASPxAppointmentStorage. All other Occurrence appointments (except for ChangedOccurrence and DeletedOccurrence) are not stored in any collection. They are automatically generated at runtime according to the RecurrenceInfo of the pattern appointment.

Note

A series of recurring appointments can be either definitive or infinitive. This is the main reason why the Occurrence appointments are not stored in any collection, to avoid stack overflow for infinitive recurring series.

End-users can edit the recurrence pattern of any appointment at runtime in a standard Appointment Editing Form, by checking the Recurrence box. The image below demonstrates the common appearance of the recurrence control area in the appointment dialog.

There are different types of recurrence patterns which can be used to specify the rule for recurring series. The following table describes what properties of the RecurrenceInfo are used for different recurrence patterns.

Expanded Recurrence Pattern Exceptions

As stated above, for all the recurring series, only the Pattern appointment is stored in the ASPxSchedulerStorage.Appointments collection. Others (Occurrence) are generated at runtime, to avoid excessive use of system memory.

However, every Pattern appointment contains a collection of exceptions. Exceptions are the Occurrence appointments which have either been changed or deleted, and so no longer meet the common recurrence rule specified by the pattern appointment.

A collection of exceptions for a particular recurrence pattern is returned via the pattern's Appointment.GetExceptions method. This collection contains both appointments of the AppointmentType.ChangedOccurrence and AppointmentType.DeletedOccurrence types. If an appointment is contained in this collection, then the corresponding Occurrence appointment, which otherwise would be generated according to the recurrence rule, is not produced at all. Changed and Deleted occurrences substitute for the normal occurrences of the pattern.

Note

To stop an appointment from being an exception, you should call the Appointment.RestoreOccurrence method for it. It restores the normal appointments chain.

How would you rate this topic?​​​​​​​