SchedulerControl.AppointmentDrag Event
Occurs when appointment is dragged in the Scheduler control.
Namespace: DevExpress.XtraScheduler
Assembly: DevExpress.XtraScheduler.v24.2.dll
Declaration
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.
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;
}