Skip to main content

SchedulerDataStorage.AppointmentChanging Event

Fires when an appointment is about to change.

Namespace: DevExpress.XtraScheduler

Assembly: DevExpress.XtraScheduler.v22.1.dll

NuGet Package: DevExpress.Win.Scheduler


public event PersistentObjectCancelEventHandler AppointmentChanging

Event Data

The AppointmentChanging event's data class is PersistentObjectCancelEventArgs. The following properties provide information specific to this event:

Property Description
Cancel Gets or sets whether to cancel the operation.
Object Gets the persistent object (appointment, resource or appointment dependency) for which the event occurs. Inherited from PersistentObjectEventArgs.


The AppointmentChanging event is raised when changing an appointment’s property. The appointment whose property is changed is identified by the event parameter’s PersistentObjectEventArgs.Object property. Set the PersistentObjectCancelEventArgs.Cancel to true to roll back changes and cancel the operation.

If you cancel a change and this causes a conflict between Appointment start and end dates, the Scheduler Control discards the cancel operation and allows the change that triggered this event.


Do not modify the appointment’s data source or data binding within this event handler. It results in the current appointment being disposed of, and consequently, an unhandled exception occurs.

Advanced Appointment Data

Cast PersistentObjectCancelEventArgs objects to the AdvPersistentObjectCancelEventArgs type to access additional information about the appointment being modified.

  • PropertyName - returns the name of the modified appointment property.
  • OldValue - the previous value of the modified appointment property.
  • NewValue - the new value of the modified appointment property.

Example 1

This event handler restricts the end-user from modifying appointments with busy status.

View Example

private void SchedulerStorage1_AppointmentChanging(object sender, PersistentObjectCancelEventArgs e) {
    if (((DevExpress.XtraScheduler.AdvPersistentObjectCancelEventArgs)e).PropertyName == "StatusKey") {
    object busyKey = schedulerDataStorage1.Appointments.Statuses.GetByType(AppointmentStatusType.Busy).Id;
    if (((Appointment)e.Object).StatusKey.Equals(busyKey)) e.Cancel = true;

Example 2

The code sample below prevents end-users from assigning empty string values to the appointment Appointment.Location property.

private void DataStorage_AppointmentChanging(object sender, PersistentObjectCancelEventArgs e) {
    AdvPersistentObjectCancelEventArgs advArgs = (AdvPersistentObjectCancelEventArgs)e;
    if (advArgs.PropertyName == "Location" && advArgs.NewValue == "") e.Cancel = true;
See Also