Arranging Appointments on Drop

2 posts, 0 answers
  1. Rod Yager
    Rod Yager avatar
    79 posts
    Member since:
    May 2010

    Posted 22 Nov 2011 Link to this post

    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;
      
            }

  2. Yana
    Admin
    Yana avatar
    4554 posts

    Posted 28 Nov 2011 Link to this post

    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 >>

  3. UI for WPF is Visual Studio 2017 Ready
Back to Top