Skip to main content

SchedulerControl.AppointmentDrag Event

Occurs when appointment is dragged in the Scheduler control.

Namespace: DevExpress.XtraScheduler

Assembly: DevExpress.XtraScheduler.v24.2.dll

Declaration

public event AppointmentDragEventHandler AppointmentDrag

Event Data

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

Property Description
AdditionalAppointments Provides access to the collection of the additional dragged appointments.
AllowAll Gets or sets whether the user can drag the appointment along time cells.
AllowThisAppointment Gets or sets whether the drag operation is allowed for a specific appointment when the user is dragging multiple appointments at the same time.
CopyEffect Indicates whether the drop effect in a drag-and-drop appointment operation is Copy.
EditedAppointment Gets the appointment being modified in the drag-and-drop event.
ForceUpdateFromStorage Gets or sets whether the View is forced to query appointments from the storage.
HitInterval Gets the time interval represented by the time cell to which an appointment was dragged.
HitResource Gets the resource to which an appointment was dragged.
NewAppointmentResourceIds Gets or sets the IDs of resources for a new appointment.
SourceAppointment Gets the source appointment in the drag-and-drop event.

Remarks

If a user drags multiple appointments, this event fires for each of them.

The AdditionalAppointments property in event parameters allows you to re-arrange other appointments that were not dragged by a user. In the sample below, if a user is about to schedule the “Start” appointment so that it finishes later in time than the related “Finish” appointment starts, the latter appointment is added to the AdditionalAppointments collection.

DevExpress Scheduler automatically reschedules an appointment when a user drags its related appointment

void SchedulerControl1_AppointmentDrag(object sender, AppointmentDragEventArgs e) {
    if (e.SourceAppointment.Subject == "Start") {
        AppointmentBaseCollection visbileApts = schedulerControl1.ActiveView.GetAppointments();
        Appointment apt = visbileApts.Find(item => item.Subject == "Finish");
        if (apt == null)
            e.AdditionalAppointments.Clear();
        else {
            if (e.SourceAppointment != apt) {
                if (e.EditedAppointment.End > apt.Start)
                    e.AdditionalAppointments.Add(apt);
                else e.AdditionalAppointments.Clear(); 
            }
        }
    }
}

To specify new positions for AdditionalAppointments, handle the SchedulerControl.AppointmentsDrag event.

private void SchedulerControl1_AppointmentsDrag(object sender, DevExpress.XtraScheduler.AppointmentsDragEventArgs e) {
    if (e.AdditionalAppointmentInfos.Count <= 0)
        return;
    AppointmentDragInfo aptInfo = e.AdditionalAppointmentInfos[0];
    if (e.PrimaryAppointmentInfos[0].EditedAppointment.End > aptInfo.SourceAppointment.Start)
        aptInfo.EditedAppointment.Start = e.PrimaryAppointmentInfos[0].EditedAppointment.End;
}
See Also