public Form1()
{
InitializeComponent();
DateTime d = DateTime.Now.Date;
radScheduler1.Appointments.Add(new Appointment(new DateTime(d.Year, d.Month, d.Day, 1, 30, 0), new DateTime(d.Year, d.Month, d.Day, 1, 30, 0), "Appointment_Free_0", "", ""));
radScheduler1.Appointments.Add(new Appointment(new DateTime(d.Year, d.Month, d.Day, 8, 30, 0), new DateTime(d.Year, d.Month, d.Day, 9, 0, 0), "Appointment_Free_0", "", ""));
radScheduler1.Appointments.Add(new Appointment(new DateTime(d.Year, d.Month, d.Day, 11, 00, 0), new DateTime(d.Year, d.Month, d.Day, 11, 30, 0), "Appointment_Free_0", "", ""));
radScheduler1.Appointments.Add(new Appointment(new DateTime(d.Year, d.Month, d.Day, 11, 0, 0), new DateTime(d.Year, d.Month, d.Day, 11, 0, 0), "Appointment_Free_0", "", ""));
radScheduler1.Appointments.Add(new Appointment(new DateTime(d.Year, d.Month, d.Day, 10, 30, 0), new DateTime(d.Year, d.Month, d.Day, 11, 0, 0), "Appointment_Free_0", "", ""));
radScheduler1.Appointments.Add(new Appointment(new DateTime(d.Year, d.Month, d.Day, 11, 00, 0), new DateTime(d.Year, d.Month, d.Day, 11, 30, 0), "Appointment_Free_0", "", ""));
radScheduler1.Appointments.Add(new Appointment(new DateTime(d.Year, d.Month, d.Day, 11, 30, 0), new DateTime(d.Year, d.Month, d.Day, 12, 0, 0), "Appointment_Free_0", "", ""));
radScheduler1.Appointments.Add(new Appointment(new DateTime(d.Year, d.Month, d.Day, 14, 0, 0), new DateTime(d.Year, d.Month, d.Day, 14, 30, 0), "Appointment_Free_0", "", ""));
radScheduler1.Appointments.Add(new Appointment(new DateTime(d.Year, d.Month, d.Day, 15, 00, 0), new DateTime(d.Year, d.Month, d.Day, 15, 30, 0), "Appointment_Free_0", "", ""));
radScheduler1.Appointments.Add(new Appointment(new DateTime(d.Year, d.Month, d.Day, 17, 30, 0), new DateTime(d.Year, d.Month, d.Day, 17, 30, 0), "Appointment_Free_0", "", ""));
radScheduler1.ActiveViewType = SchedulerViewType.Day;
radScheduler1.EnableExactTimeRendering = true;
}
Workaround: use a custom DayViewAppointmentsTable
this.radScheduler1.ElementProvider = new MyElementProvider(this.radScheduler1);
public class MyElementProvider : SchedulerElementProvider
{
public MyElementProvider(RadScheduler scheduler) : base(scheduler)
{
}
protected override T CreateElement<T>(SchedulerView view, object context)
{
if (typeof(T) == typeof(DayViewAppointmentsTable))
{
return new CustomDayViewAppointmentsTable(view.Scheduler, view, (DayViewAppointmentsArea)context)as T;
}
return base.CreateElement<T>(view, context);
}
}
public class CustomDayViewAppointmentsTable : DayViewAppointmentsTable
{
public CustomDayViewAppointmentsTable(RadScheduler scheduler, SchedulerView view, DayViewAppointmentsArea area) : base(scheduler, view, area)
{
}
protected override IEnumerable<AppointmentElement> CreateAppointmentElements()
{
if (this.View != null)
{
IList<IEvent> appointmentsInView = new List<IEvent>(this.View.Appointments);
List<AppointmentElement> elements = DivideAppointmentToElements(appointmentsInView);
elements.Sort(0, elements.Count, new DateTimeComparer(this.Scheduler));
foreach (AppointmentElement currentAppointment in elements)
{
currentAppointment.RelatedAppointments.Clear();
currentAppointment.DesiredBounds = new RectangleF();
}
foreach (AppointmentElement appointment in elements)
{
List<AppointmentElement> intersectingAppointments = this.GetAllAppointmentsInDay(appointment.Start.Day, elements);
intersectingAppointments.Remove(appointment);
appointment.RelatedAppointments = intersectingAppointments;
}
return elements;
}
else
{
return new List<AppointmentElement>();
}
}
private List<AppointmentElement> GetAllAppointmentsInDay(int day, List<AppointmentElement> elements)
{
List<AppointmentElement> result = new List<AppointmentElement>();
foreach (AppointmentElement appointment in elements)
{
if (appointment.Start.Day == day)
{
result.Add(appointment);
}
}
return result;
}
private List<AppointmentElement> DivideAppointmentToElements(IList<IEvent> appointmentsInView)
{
List<AppointmentElement> childAppointments = new List<AppointmentElement>();
TimeSpan startTime = TimeSpan.FromMinutes(this.GetDayViewBase().RulerStartScale * 60 + this.GetDayViewBase().RulerStartScaleMinutes);
TimeSpan endTime = TimeSpan.FromMinutes(this.GetDayViewBase().RulerEndScale * 60 + this.GetDayViewBase().RulerEndScaleMinutes);
foreach (IEvent app in appointmentsInView)
{
SchedulerDayViewBase dayView = this.GetDayViewBase();
bool allDay = (dayView != null) ? dayView.IsAllDayEvent(app) : false;
DateTime appStart = this.View.DefaultTimeZone.OffsetTime(app.Start, this.Scheduler.SystemTimeZone);
DateTime appEnd = this.View.DefaultTimeZone.OffsetTime(app.End, this.Scheduler.SystemTimeZone);
if (!allDay)
{
// Handle > 1 day appointments
if (appStart.Day != appEnd.Day && !(appEnd.Day - appStart.Day == 1 && appEnd.TimeOfDay == TimeSpan.Zero))
{
AppointmentElement appointment1 = this.CreateAppointmentElement(this.Scheduler, this.View, app);
appointment1.Start = appStart;
appointment1.End = DateHelper.GetEndOfDay(appStart);
if (appointment1.Start.TimeOfDay >= endTime)
{
appointment1.Start = new DateTime(appStart.Year, appStart.Month,
appStart.Day, 0, 0, 0).Add(endTime).AddMinutes(-(int)this.GetDayViewBase().RangeFactor);
}
AppointmentElement appointment2 = this.CreateAppointmentElement(this.Scheduler, this.View, app);
appointment2.Start = appEnd.Date;
appointment2.End = appEnd;
if (appointment1.Start >= this.View.StartDate)
{
childAppointments.Add(appointment1);
}
if (appointment2.Start >= this.View.StartDate)
{
childAppointments.Add(appointment2);
}
}
else
{
AppointmentElement appointment1 = this.CreateAppointmentElement(this.Scheduler, this.View, app);
appointment1.Start = appStart;
appointment1.End = appEnd;
if (appointment1.Start.TimeOfDay < startTime)
{
appointment1.Start = new DateTime(appStart.Year, appStart.Month, appStart.Day, 0, 0, 0).Add(startTime);
}
if (appointment1.Start.TimeOfDay >= endTime)
{
appointment1.Start = new DateTime(appStart.Year, appStart.Month, appStart.Day, 0,
0, 0).Add(endTime).AddMinutes(-(int)this.GetDayViewBase().RangeFactor);
}
if (appointment1.End.TimeOfDay > endTime)
{
appointment1.End = new DateTime(appEnd.Year, appEnd.Month, appEnd.Day, 0, 0, 0).Add(endTime);
}
if (appointment1.End.TimeOfDay <= startTime)
{
appointment1.End = new DateTime(appEnd.Year, appEnd.Month, appEnd.Day, 0, 0,
0).Add(startTime).AddMinutes((int)this.GetDayViewBase().RangeFactor);
}
childAppointments.Add(appointment1);
}
}
else if (!dayView.ShowAllDayArea)
{
DateTimeInterval viewInterval = new DateTimeInterval(this.View.StartDate, DateHelper.GetEndOfDay(this.View.EndDate));
AppointmentElement appointment1 = this.CreateAppointmentElement(this.Scheduler, this.View, app);
appointment1.Start = appStart;
appointment1.End = DateHelper.GetEndOfDay(appStart);
DateTimeInterval interval = new DateTimeInterval(appStart, appointment1.End);
if (interval.IntersectsWith(viewInterval))
{
if (appointment1.Start.TimeOfDay < startTime)
{
appointment1.Start = new DateTime(appStart.Year, appStart.Month, appStart.Day, 0, 0, 0).Add(startTime);
}
if (appointment1.Start.TimeOfDay >= endTime)
{
appointment1.Start = new DateTime(appStart.Year, appStart.Month, appStart.Day, 0, 0,
0).Add(endTime).AddMinutes(-(int)this.GetDayViewBase().RangeFactor);
}
if (appointment1.End.TimeOfDay > endTime)
{
appointment1.End = new DateTime(appEnd.Year, appEnd.Month, appEnd.Day, 0, 0, 0).Add(endTime);
}
if (appointment1.End.TimeOfDay <= startTime)
{
appointment1.End = new DateTime(appEnd.Year, appEnd.Month, appEnd.Day, 0, 0,
0).Add(startTime).AddMinutes((int)this.GetDayViewBase().RangeFactor);
}
childAppointments.Add(appointment1);
}
DateTime startDate = appStart.AddDays(1).Date;
AppointmentElement appointment2 = null;
while (startDate <= appEnd.Date.AddDays(-1))
{
appointment2 = this.CreateAppointmentElement(this.Scheduler, this.View, app);
appointment2.Start = startDate;
appointment2.End = DateHelper.GetEndOfDay(startDate);
interval = new DateTimeInterval(appointment2.Start, appointment2.End);
if (interval.IntersectsWith(viewInterval))
{
childAppointments.Add(appointment2);
}
startDate = startDate.AddDays(1);
}
DateTime endDate = appEnd.Date;
DateTime endAppointmentDate = appEnd;
appointment2 = this.CreateAppointmentElement(this.Scheduler, this.View, app);
appointment2.Start = endDate;
appointment2.End = endAppointmentDate;
interval = new DateTimeInterval(endDate, endAppointmentDate);
if (interval.IntersectsWith(viewInterval) && interval.Start != appStart)
{
childAppointments.Add(appointment2);
}
}
}
return childAppointments;
}
private AppointmentElement CreateAppointmentElement(RadScheduler scheduler, SchedulerView view, IEvent appointment)
{
AppointmentElement appointmentElement = null;
if (scheduler.AppointmentElementFactory != null)
{
appointmentElement = scheduler.AppointmentElementFactory.CreateAppointmentElement(scheduler, view, appointment);
}
else
{
appointmentElement = scheduler.ElementProvider.GetElement<AppointmentElement>(view, appointment);
}
return appointmentElement;
}
}