This is a migrated thread and some comments may be shown as answers.

Arranging Appointments on Drop

1 Answer 60 Views
ScheduleView
This is a migrated thread and some comments may be shown as answers.
Rod Yager
Top achievements
Rank 1
Rod Yager asked on 22 Nov 2011, 04:15 PM

I have two sources for dragging and dropping appointments onto the ScheduleView. Both consist of dragging custom appt objects so they both utilize a custom dragdrop handler class and use the override of the ConvertDraggedData method. I am wondering if it would be possible to arrange the appts in such a way that if I grabbed appts from all over the view and then dragged them to a specific resource at a specific time, If I could then just have them updated in such a way that the appts were dropped one after another in the view (stacked horizontally in timeline view for example). I think the issue I am having is that destination slots need to be updated somehow to reflect where I want the appts to eventually be. Hopefully this isn't too confusing and someone can lead me in the right direction. Here is a bit of code that I wrote but obviously it isn't working like I expect at this point. I am basically trying to re-arrange the appts so that one comes right after another when they are dropped. The collection looks like I expect when it comes out of my ArrageTasks, but the result is the appts still end up in slots all over the view.

public override IEnumerable<IOccurrence> ConvertDraggedData(object data)
        {
            if (data.GetType() == typeof(DataObject))
            {
                return ArrangeTasks(data);
                //return (data as DataObject).GetData("MetrixTaskAppointments") as IList<IOccurrence>;
            }
 
            return base.ConvertDraggedData(data);
        }
 
        private IEnumerable<IOccurrence> ArrangeTasks(object data)
        {
            IList<IOccurrence> appts = (data as DataObject).GetData("MetrixTaskAppointments") as IList<IOccurrence>;
            IEnumerable<IOccurrence> sortedAppts = appts.OrderBy(f => f.Start);
 
            IEnumerator apptEnumerator = sortedAppts.GetEnumerator();
            DateTime savedPlanTravelEndDttm = DateTime.Now;
            bool firstTask = true;
            while (apptEnumerator.MoveNext())
            {
                MetrixTaskAppointment mAppt = (MetrixTaskAppointment)apptEnumerator.Current;
                IAppointment appt = (Appointment)apptEnumerator.Current;
 
                if (firstTask == true)
                {
                    firstTask = false;
                }
                else
                {                   
                    mAppt.PlanTravelStartDttm = savedPlanTravelEndDttm;
                    mAppt.PlanStartDttm = mAppt.PlanTravelStartDttm.AddMinutes(mAppt.PlanTravelToMin);
                    mAppt.PlanEndDttm = mAppt.PlanStartDttm.AddMinutes(mAppt.PlanTaskDurMin);
                    mAppt.PlanTravelEndDttm = mAppt.PlanEndDttm.AddMinutes(mAppt.PlanTravelReturnMin);
                    appt.Start = mAppt.PlanStartDttm;
                    appt.End = mAppt.PlanEndDttm;
                }
                 
                savedPlanTravelEndDttm = mAppt.PlanTravelEndDttm;
            }
 
            return sortedAppts;
  
        }

1 Answer, 1 is accepted

Sort by
0
Yana
Telerik team
answered on 28 Nov 2011, 09:55 AM
Hello Rod,

Please find attached a sample example which demonstrates how you can achieve the needed approach, download it and give it a try.

Hope it helps.

Greetings,
Yana
the Telerik team

Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

Tags
ScheduleView
Asked by
Rod Yager
Top achievements
Rank 1
Answers by
Yana
Telerik team
Share this question
or