private void SchedulerControl1_AdditionalAppointmentsDrag(object sender, AdditionalAppointmentsDragEventArgs e)
        {
            if (e.AdditionalAppointmentInfos.Count <= 0)
            {
                return;
            }
            AppointmentDragInfo aptInfo = e.AdditionalAppointmentInfos[0];

            // If the end of the main dragged appointment becomes greater than the start of the special appointment,
            // set the start of the special appointment being dragged to the end of the main dragged appointment.
            // It prevents overlapping appointments.
            if (e.PrimaryAppointmentInfos[0].EditedAppointment.End > aptInfo.SourceAppointment.Start)
            {
                aptInfo.EditedAppointment.Start = e.PrimaryAppointmentInfos[0].EditedAppointment.End;
            }
        }
        void OnSchedulerControlAdditionalAppointmentsDrag(object sender, AdditionalAppointmentsDragEventArgs e)
        {
            List <AppointmentExchangeData> exchangeList = new List <AppointmentExchangeData>();

            foreach (AppointmentDragInfo aptInfo in e.PrimaryAppointmentInfos)
            {
                var apt = aptInfo.EditedAppointment;
                exchangeList.Add(new AppointmentExchangeData()
                {
                    Subject     = apt.Subject,
                    Description = apt.Description,
                    Start       = DateTime.MinValue,
                    Duration    = apt.Duration,
                    LabelKey    = (int)apt.LabelKey,
                    StatusKey   = (int)apt.StatusKey
                });
            }
            e.Data.SetData(DataFormats.Serializable, exchangeList);
        }