How to reproduce: check the attached (video radscheduler-selection-incorrect.gif)
public RadForm1()
{
InitializeComponent();
Appointment appointment = new Appointment(DateTime.Today.AddHours(13), TimeSpan.FromHours(1), "Test Appointment");
this.radScheduler1.Appointments.Add(appointment);
for (int i = 0; i < 25; i++)
{
appointment = new Appointment(DateTime.Today.AddHours(24), TimeSpan.FromHours(1), "AllDay: " + i);
appointment.AllDay = true;
this.radScheduler1.Appointments.Add(appointment);
}
this.radScheduler1.AllowAppointmentsMultiSelect = true;
}
Workaround: create a custom input behavior
this.radScheduler1.SchedulerInputBehavior = new CustomSchedulerInputBehavior(this.radScheduler1);
public class CustomSchedulerInputBehavior : SchedulerInputBehavior
{
public CustomSchedulerInputBehavior(RadScheduler scheduler)
: base(scheduler)
{
}
public override bool HandleMouseWheel(MouseEventArgs args)
{
if (!this.Scheduler.AllowMouseWheelSupport)
return false;
bool scrolled = false;
if (this.Scheduler.SelectionBehavior.IsAllDayAreaSelection || this.IsLastSelectedAppointmentAllDay(this.Scheduler.SelectionBehavior.SelectedAppointments))
{
if (this.Scheduler.GroupType == GroupType.Resource)
{
SchedulerDayViewGroupedByResourceElement grouped = this.Scheduler.ViewElement as SchedulerDayViewGroupedByResourceElement;
IList<SchedulerDayViewElement> childViews = grouped != null ? grouped.GetChildViewElements() : null;
if (childViews != null && childViews.Count > 0)
{
RadScrollBarElement scroll = childViews[childViews.Count - 1].AllDayHeaderElement.ScrollBar;
if (scroll.Visibility != ElementVisibility.Collapsed)
{
int newValue = scroll.Value - childViews[childViews.Count - 1].AllDayHeaderElement.HeaderHeight * Math.Sign(args.Delta);
newValue = Math.Max(Math.Min(newValue, scroll.Maximum - scroll.LargeChange + 1), scroll.Minimum);
scroll.Value = newValue;
scrolled = true;
}
}
}
else
{
SchedulerDayViewElement dayView = this.Scheduler.ViewElement as SchedulerDayViewElement;
RadScrollBarElement scroll = dayView != null ? dayView.AllDayHeaderElement.ScrollBar : null;
if (scroll != null && scroll.Visibility != ElementVisibility.Collapsed)
{
int newValue = scroll.Value - dayView.AllDayHeaderElement.HeaderHeight * Math.Sign(args.Delta);
newValue = Math.Max(Math.Min(newValue, scroll.Maximum - scroll.LargeChange + 1), scroll.Minimum);
scroll.Value = newValue;
scrolled = true;
}
}
}
if (scrolled)
{
return false;
}
if (args.Delta > 0)
{
this.Scheduler.ViewElement.Scroll(true);
}
else
{
this.Scheduler.ViewElement.Scroll(false);
}
return false;
}
private bool IsLastSelectedAppointmentAllDay(ReadOnlyCollection<IEvent> selectedAppointments)
{
if (selectedAppointments.Count > 0)
{
return selectedAppointments[selectedAppointments.Count - 1].AllDay;
}
return false;
}
}