Broken in version R3 2016 (2016.3.913) How to reproduce: SchedulerDayViewElement dayViewElement = (SchedulerDayViewElement)this.radScheduler1.ViewElement; dayViewElement.SetColumnWidth(1, 2); Workaround: IDictionary cachedSum = (IDictionary)dayViewElement.GetType().GetField("cachedSum", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(dayViewElement); cachedSum.Clear(); IDictionary cachedColumnHorizontalOffset = (IDictionary)dayViewElement.GetType().GetField("cachedColumnHorizontalOffset", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(dayViewElement); cachedColumnHorizontalOffset.Clear(); SchedulerDayViewElement dayViewElement = (SchedulerDayViewElement)this.radScheduler1.ViewElement; dayViewElement.SetColumnWidth(1, 2);
1. Add RadSchedulerNavigator and a RadScheduler. Change the view type to Week View. 2. Associate the RadSchedulerNavigator to RadScheduler. Change the PC's time zone to (UTC-03:00) Brasilia Time zone 3. Change the PC's date to 21 Oct 2016 and run the application. 4. When you change the time zone in RadSchedulerNavigator to (UTC-03:00) Brasilia Time zone, you will notice that the ruler starts from 23. Workaround: public Form1() { InitializeComponent(); radSchedulerNavigator1.AssociatedScheduler = radScheduler1; this.radScheduler1.ActiveViewChanged += radScheduler1_ActiveViewChanged; this.radScheduler1.CellElementMouseDown += radScheduler1_CellElementMouseDown; this.radScheduler1.AppointmentEditDialogShowing += radScheduler1_AppointmentEditDialogShowing; radScheduler1.ActiveViewType = Telerik.WinControls.UI.SchedulerViewType.Week; } DateTime? date = null; private void radScheduler1_CellElementMouseDown(object sender, MouseEventArgs e) { SchedulerCellElement cell = this.radScheduler1.ElementTree.GetElementAtPoint(e.Location) as SchedulerCellElement; if (cell != null) { date = cell.Date; } } CustomEditAppointmentDialog dialog = null; private void radScheduler1_AppointmentEditDialogShowing(object sender, AppointmentEditDialogShowingEventArgs e) { if (dialog == null) { dialog = new CustomEditAppointmentDialog(); } e.AppointmentEditDialog = dialog; if (date != null && !e.Appointment.Start.Equals(date)) { e.Appointment.Start = (DateTime)date; } date = null; } private void radScheduler1_ActiveViewChanged(object sender, Telerik.WinControls.UI.SchedulerViewChangedEventArgs e) { SchedulerDayView dayView = e.NewView as SchedulerDayView; SchedulerWeekView weekView = e.NewView as SchedulerWeekView; if (dayView != null || weekView != null) { RulerPrimitive ruler = (this.radScheduler1.SchedulerElement.ViewElement as SchedulerDayViewElement).DataAreaElement.Ruler; ruler.GetType().GetField("defaultOffset", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(ruler, 0.0f); } } public class CustomEditAppointmentDialog : EditAppointmentDialog { protected override void LoadSettingsFromEvent(IEvent sourceEvent) { base.LoadSettingsFromEvent(sourceEvent); this.dateStart.Value = sourceEvent.Start; this.timeStart.Value = sourceEvent.Start; } }
Workaround: Sub New() InitializeComponent() Me.RadScheduler1.ActiveViewType = UI.SchedulerViewType.Week AddHandler Me.RadSchedulerNavigator1.SchedulerNavigatorElement.ShowWeekendCheckBox.ToggleStateChanged, AddressOf ToggleStateChanged End Sub Private Sub ToggleStateChanged(sender As Object, args As UI.StateChangedEventArgs) Me.RadScheduler1.SchedulerElement.RefreshViewElement() End Sub
To reproduce: public Form1() { InitializeComponent(); this.radScheduler1.ActiveViewType = SchedulerViewType.Month; Appointment appointment = new Appointment(DateTime.Today.AddHours(23).AddMinutes(45), new TimeSpan(0,15,0), "Meeting"); DailyRecurrenceRule rrule = new DailyRecurrenceRule(appointment.Start, 1, 10); appointment.RecurrenceRule = rrule; this.radScheduler1.Appointments.Add(appointment); this.radScheduler1.EnableExactTimeRendering = true; } Click "This month" in RadSchedulerNavigator. Workaround: In order to deal with the border case with appointment ending at 00:00h, use a new TimeSpan(0,14,59)
To reproduce: public Form1() { InitializeComponent(); this.radScheduler1.ActiveViewType = SchedulerViewType.Week; SchedulerWeekView weekView = this.radScheduler1.GetWeekView(); weekView.RangeFactor = ScaleRange.QuarterHour; Appointment appointment = new Appointment(DateTime.Today.AddHours(23).AddMinutes(45), new TimeSpan(0,15,0), "Meeting"); DailyRecurrenceRule rrule = new DailyRecurrenceRule(appointment.Start, 1, 10); appointment.RecurrenceRule = rrule; this.radScheduler1.Appointments.Add(appointment); } Workaround: In order to deal with the border case with appointment ending at 00:00h, use a new TimeSpan(0,14,59)
To reproduce: public Form1() { InitializeComponent(); this.radScheduler1.ActiveViewType = SchedulerViewType.Week; SchedulerWeekView weekView = this.radScheduler1.GetWeekView(); weekView.RangeFactor = ScaleRange.QuarterHour; Appointment appointment = new Appointment(DateTime.Today.AddHours(23).AddMinutes(45), new TimeSpan(0,15,0), "Meeting"); this.radScheduler1.Appointments.Add(appointment); } private void radCheckBox1_ToggleStateChanged(object sender, Telerik.WinControls.UI.StateChangedEventArgs args) { this.radScheduler1.EnableExactTimeRendering = this.radCheckBox1.Checked; } Please refer to the attached gif file. Workaround: In order to deal with the border case with appointment ending at 00:00h, use a new TimeSpan(0,14,59)
To reproduce: public Form1() { InitializeComponent(); this.radScheduler1.ActiveViewType = SchedulerViewType.Day; RulerPrimitive ruler = (this.radScheduler1.SchedulerElement.ViewElement as SchedulerDayViewElement).DataAreaElement.Ruler; ruler.RangeFactor= ScaleRange.TenMinutes; } Workaround: this.radScheduler1.GetDayView().RangeFactor = ScaleRange.TenMinutes;
Please refer to the attached screenshot. Workaround: public Form1() { InitializeComponent(); 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(AppointmentElement)) { return new CustomAppointmentElement(this.Scheduler, view, (IEvent)context)as T; } return base.CreateElement<T>(view, context); } } public class CustomAppointmentElement : AppointmentElement { protected override Type ThemeEffectiveType { get { return typeof(AppointmentElement); } } public CustomAppointmentElement(RadScheduler scheduler, SchedulerView view, IEvent appointment) : base(scheduler, view, appointment) { } protected override SizeF ArrangeOverride(SizeF finalSize) { SizeF s = base.ArrangeOverride(finalSize); return new SizeF(s.Width - 5,s.Height); } }
To reproduce: this.radScheduler1.ActiveViewType = SchedulerViewType.Month; for (int i = 0; i < 10; i++) { this.radScheduler1.Appointments.Add(new Appointment(DateTime.Now.AddHours(i),TimeSpan.FromMinutes(30),"A"+i)); } Scroll to the bottom and try to select an appointment. You will notice that selection is not possible. The attached gif file illustrates the incorrect behavior. Workaround: use the overflow button by setting the SchedulerMonthView.EnableCellOverflowButton property to true: SchedulerMonthView monthView = this.radScheduler1.GetMonthView(); monthView.EnableCellOverflowButton = true;
To reproduce: public Form1() { InitializeComponent(); this.radScheduler1.ActiveViewType = Telerik.WinControls.UI.SchedulerViewType.Month; CultureInfo culture = new CultureInfo("en-US"); culture.DateTimeFormat.FirstDayOfWeek = DayOfWeek.Monday; this.radScheduler1.Culture = culture; Appointment a = new Appointment(new DateTime(2016, 8, 29, 0, 0, 0), new DateTime(2016, 9, 5, 0, 0, 0), "Meeting"); this.radScheduler1.Appointments.Add(a); this.radScheduler1.FocusedDate = new DateTime(2016, 9, 1); this.radScheduler1.EnableExactTimeRendering = true; } When you run the application starting scrolling with the mouse wheel up/down. Workaround: do not set the FirstDayOfWeek to Monday.
To reproduce: public Form1() { InitializeComponent(); CultureInfo culture = new CultureInfo("en-US"); culture.DateTimeFormat.FirstDayOfWeek = DayOfWeek.Monday; this.radScheduler1.Culture = culture; this.radScheduler1.ActiveViewType = Telerik.WinControls.UI.SchedulerViewType.Month; Appointment a = new Appointment(new DateTime(2016, 8, 29, 0, 0, 0), new DateTime(2016, 9, 5, 0, 0, 0), "Meeting"); this.radScheduler1.Appointments.Add(a); this.radScheduler1.FocusedDate = new DateTime(2016, 9, 1); } Please refer to the attached gif file.
To reproduce: Sub New() InitializeComponent() Dim colors() As Color = {Color.LightBlue, Color.LightGreen, Color.LightYellow, Color.Red, _ Color.Orange, Color.Pink, Color.Purple, Color.Peru, Color.PowderBlue} Dim names() As String = {"Alan Smith", "Anne Dodsworth", "Boyan Mastoni", "Richard Duncan", "Maria Shnaider"} For i As Integer = 0 To names.Length - 1 Dim resource As New Telerik.WinControls.UI.Resource() resource.Id = New EventId(i) resource.Name = names(i) resource.Color = colors(i) Me.RadScheduler1.Resources.Add(resource) Next i Me.RadScheduler1.GroupType = GroupType.Resource Me.RadScheduler1.ActiveView.ResourcesPerView = Me.RadScheduler1.Resources.Count Me.RadScheduler1.ActiveViewType = SchedulerViewType.Timeline Dim rand As New Random For index = 1 To 20 Dim a As New Appointment(DateTime.Now.AddDays(index), TimeSpan.FromHours(2), "A" & index) a.ResourceId = Me.RadScheduler1.Resources(rand.Next(0, Me.RadScheduler1.Resources.Count)).Id Me.RadScheduler1.Appointments.Add(a) Next Dim timelineView As SchedulerTimelineView = Me.RadScheduler1.GetTimelineView() Dim oneMinute As New OneMinuteTimescale() timelineView.SchedulerTimescales.Add(oneMinute) oneMinute.Visible = True End Sub Public Class OneMinuteTimescale Inherits MinutesTimescale Public Overrides ReadOnly Property Name As String Get Return "OneMinuteTimescale" End Get End Property Public Overrides ReadOnly Property ScalingFactor() As Integer Get Return 1 End Get End Property End Class Workaround: decrease the range: timelineView.RangeStartDate = DateTime.Today timelineView.RangeEndDate = timelineView.RangeStartDate.AddDays(1)
To reproduce: public Form1() { InitializeComponent(); this.radScheduler1.ActiveViewType = SchedulerViewType.Month; this.radScheduler1.Appointments.Add(new Appointment(new DateTime(9999,12,22),TimeSpan.FromMinutes(30),"A1")); }
In RadScheduler I have appointment with End set to new DateTime(9999, 12, 22) (or greater). When I switch to Month view the exception is thrown: The added or subtracted value results in an un-representable DateTime. Found in version: 2016.2.608.40 It was working in version: 2013.2.724.40
To reproduce: Public Class Form1 Sub New() InitializeComponent() Me.RadScheduler1.EnableExactTimeRendering = True Dim dt = DateTime.Now Me.RadScheduler1.Appointments.Add(New Appointment(dt.AddMinutes(-10).AddSeconds(1), Now, "A1")) Me.RadScheduler1.Appointments.Add(New Appointment(dt.AddMinutes(-15), DateTime.Now.AddMinutes(-10), "A2")) Me.RadScheduler1.GetTimelineView().StartDate = DateAdd(DateInterval.Minute, -15, Now) Dim customScale As CustomTimescalePerMinute = New CustomTimescalePerMinute() Dim timelineView As SchedulerTimelineView = Me.RadScheduler1.GetTimelineView() timelineView.SchedulerTimescales.Add(customScale) timelineView.ShowTimescale(customScale) Dim currentScaling As SchedulerTimescale = timelineView.GetScaling() currentScaling.DisplayedCellsCount = 15 End Sub End Class Public Class CustomTimescalePerMinute Inherits MinutesTimescale Public Overrides ReadOnly Property ScalingFactor() As Integer Get Return 1 End Get End Property End Class Note: the attached gif file illustrates the behavior. Initially, the first appointment's end is not rendered in the correct time slot. After scrolling, it is displayed correctly. Workaround: force scrolling Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim t As SchedulerTimelineViewElement = TryCast(Me.RadScheduler1.SchedulerElement.ViewElement, SchedulerTimelineViewElement) Dim value = t.NavigationElement.Value t.NavigationElement.Value += 1 Me.RadScheduler1.SchedulerElement.RefreshViewElement() t.NavigationElement.Value = value End Sub
To reproduce: Resource lResource; var LColors = new Color[5]; SchedulerMultiDayView multyDayView; DateTime startDate; int interval; radScheduler1.Statuses.Add(new AppointmentStatusInfo(5, "New", Color.Green, Color.Green, AppointmentStatusFillType.Solid)); radScheduler1.Statuses.Add(new AppointmentStatusInfo(6, "ACCP", Color.DarkOrange, Color.DarkOrange, AppointmentStatusFillType.Solid)); lResource = new Resource(); lResource.Id = new EventId(1); lResource.Name = "Bert"; lResource.Color = Color.Red; radScheduler1.Resources.Add(lResource); radScheduler1.ActiveView.ShowHeader = true; this.radScheduler1.ActiveViewType = SchedulerViewType.MultiDay; multyDayView = this.radScheduler1.GetMultiDayView(); startDate = DateTime.Today; interval = 30; radScheduler1.GroupType = GroupType.Resource; multyDayView.Intervals.Add(startDate, interval); multyDayView.RulerScaleSize = 4; radScheduler1.EnableExactTimeRendering = true; multyDayView.RangeFactor = ScaleRange.Hour;
To reproduce: Color[] colors = new Color[] { Color.LightBlue, Color.LightGreen, Color.LightYellow, Color.Red, Color.Orange, Color.Pink, Color.Purple, Color.Peru, Color.PowderBlue }; Random rand = new Random(); for (int i = 0; i < 25; i++) { Resource resource = new Resource(); resource.Id = new EventId(i); resource.Name = i + ".Resource"; resource.Color = colors[rand.Next(0, colors.Length)]; this.radScheduler1.Resources.Add(resource); } this.radScheduler1.GroupType = GroupType.Resource; this.radScheduler1.ActiveView.ResourcesPerView = this.radScheduler1.Resources.Count; for (int i = 0; i < 3; i++) { Appointment a = new Appointment(DateTime.Now.AddHours(i), TimeSpan.FromMinutes(30), "A" + i); a.ResourceId = this.radScheduler1.Resources.Last().Id; this.radScheduler1.Appointments.Add(a); } NOTE: it is also valid for the horizontal scrollbar in Timeline view. Workaround: use the SetResourceSize to increase the last resource's width a little bit: http://docs.telerik.com/devtools/winforms/scheduler/views/grouping-by-resources
To reproduce: RadScheduler radScheduler1 = new RadScheduler(); public Form1() { InitializeComponent(); this.Controls.Add(this.radScheduler1); this.radScheduler1.Dock = DockStyle.Fill; Timer timer = new Timer(); timer.Interval = 1000; timer.Tick += timer_Tick; this.radScheduler1.ActiveViewType = SchedulerViewType.Timeline; SetupView(DateTime.Now.Date); timer.Start(); } private void SetupView(DateTime currentDateTime) { SchedulerTimelineView timelineView = radScheduler1.GetTimelineView(); timelineView.RangeStartDate = currentDateTime; timelineView.RangeEndDate = currentDateTime.AddHours(23).AddMinutes(59).AddSeconds(59); timelineView.StartDate = currentDateTime; radScheduler1.FocusedDate = currentDateTime; var scale = Timescales.Hours; timelineView.ShowTimescale(scale); var currentScaling = timelineView.GetScaling(); currentScaling.DisplayedCellsCount = 24; this.radScheduler1.SchedulerElement.RefreshViewElement(); } int count = 1; private void timer_Tick(object sender, EventArgs e) { SetupView(DateTime.Now.AddDays(++count)); } Workaround: SchedulerTimelineView .ShowNavigationElement = false;
To reproduce: public RadRibbonForm1() { InitializeComponent(); this.radScheduler1.FocusedDate = new DateTime(2016, 1, 1); this.radScheduler1.ActiveViewType = Telerik.WinControls.UI.SchedulerViewType.Timeline; SchedulerTimelineView timelineView = this.radScheduler1.GetTimelineView(); timelineView.RangeStartDate = new DateTime(2016, 1, 1, 00, 00, 00); timelineView.RangeEndDate = new DateTime(2016, 12, 31, 23, 59, 59); timelineView.StartDate = new DateTime(2016, 1, 1, 00, 00, 00); Appointment appointment = new Appointment(new DateTime(2016, 1, 1, 00, 00, 00), new DateTime(2016, 1, 10, 00, 00, 00), "Quarter 1"); Appointment appointment2 = new Appointment(new DateTime(2016, 2, 1, 00, 00, 00), new DateTime(2016, 2, 10, 00, 00, 00), "Quarter 1"); Appointment appointment3 = new Appointment(new DateTime(2016, 4, 1, 00, 00, 00), new DateTime(2016, 4, 10, 00, 00, 00), "Quarter 2"); Appointment appointment4 = new Appointment(new DateTime(2016, 5, 1, 00, 00, 00), new DateTime(2016, 6, 10, 00, 00, 00), "Quarter 2"); Appointment appointment5 = new Appointment(new DateTime(2016, 7, 1, 00, 00, 00), new DateTime(2016, 7, 10, 00, 00, 00), "Quarter 3"); Appointment appointment6 = new Appointment(new DateTime(2016, 8, 1, 00, 00, 00), new DateTime(2016, 8, 10, 00, 00, 00), "Quarter 3"); Appointment appointment7 = new Appointment(new DateTime(2016, 11, 1, 00, 00, 00), new DateTime(2016, 11, 10, 00, 00, 00), "Quarter 4"); Appointment appointment8 = new Appointment(new DateTime(2016, 12, 1, 00, 00, 00), new DateTime(2016, 12, 10, 00, 00, 00), "Quarter 4"); this.radScheduler1.Appointments.Add(appointment); this.radScheduler1.Appointments.Add(appointment2); this.radScheduler1.Appointments.Add(appointment3); this.radScheduler1.Appointments.Add(appointment4); this.radScheduler1.Appointments.Add(appointment5); this.radScheduler1.Appointments.Add(appointment6); this.radScheduler1.Appointments.Add(appointment7); this.radScheduler1.Appointments.Add(appointment8); QuarterTimescale qTimeScale = new QuarterTimescale(); qTimeScale.DisplayedCellsCount = 4; timelineView.SchedulerTimescales.Add(qTimeScale); this.radScheduler1.GetTimelineView().ShowTimescale(qTimeScale); } class QuarterTimescale : MonthTimescale { public override int ScalingFactor { get { return 3; } } public override string Name { get { return "Quarter"; } } }