The resulting behavior should be similar to having all day appointments in the control with the view having its ShowAllDayArea property set to false. Currently when printed the all day appointments are drawn in the all day area.
How to reproduce:
Public Class Form1
Sub New()
InitializeComponent()
End Sub
Protected Overrides Sub OnLoad(e As EventArgs)
MyBase.OnLoad(e)
Me.SetUpScheduler()
For i As Integer = 0 To 0
Dim app As New Appointment(DateTime.Now.AddHours(1), TimeSpan.FromMinutes(60), "Summary" & i, "Description1")
app.ResourceId = Me.RadScheduler1.Resources(i).Id
Me.RadScheduler1.Appointments.Add(app)
Dim app2 As New Appointment(DateTime.Now.AddHours(3), TimeSpan.FromMinutes(60), "Summary" & i, "Description2")
app2.BackgroundId = 2
app2.ResourceId = Me.RadScheduler1.Resources(i).Id
Me.RadScheduler1.Appointments.Add(app2)
Dim recurringAppointment As New Appointment(DateTime.Now, TimeSpan.FromMinutes(60), "Recurring" & i, "Recurring Appointment")
recurringAppointment.BackgroundId = 4
recurringAppointment.ResourceId = Me.RadScheduler1.Resources(i).Id
recurringAppointment.RecurrenceRule = New DailyRecurrenceRule(DateTime.Now, 1, 10)
Me.RadScheduler1.Appointments.Add(recurringAppointment)
Next
'AddHandler Me.RadScheduler1.CellPrintElementFormatting, AddressOf RadScheduler1_CellPrintElementFormatting
End Sub
Private Sub SetUpScheduler()
Dim colors As Color() = New Color() {Color.LightBlue, Color.LightGreen, Color.LightYellow, Color.Red, Color.Orange, Color.Pink, _
Color.Purple, Color.Peru, Color.PowderBlue}
'Dim names As String() = New String() {"Alan Smith", "Anne Dodsworth", "Boyan Mastoni", "Richard Duncan", "Maria Schneider"}
Dim names As String() = New String() {"Rick Astley"}
For i As Integer = 0 To names.Length - 1
Dim resource As New Resource()
resource.Id = New EventId(i)
resource.Name = names(i)
resource.Color = colors(i)
Me.RadScheduler1.Resources.Add(resource)
Next
Me.RadScheduler1.ActiveView.ResourcesPerView = 1
Me.RadScheduler1.GroupType = GroupType.Resource
Me.RadSchedulerNavigator1.SchedulerNavigatorElement.TimeZonesElementLayout.Visibility = ElementVisibility.Collapsed
Me.RadSchedulerNavigator1.ShowWeekendCheckBox.Visibility = ElementVisibility.Collapsed
Me.RadSchedulerNavigator1.SchedulerNavigatorElement.MonthViewButton.Visibility = ElementVisibility.Collapsed
Me.RadSchedulerNavigator1.SchedulerNavigatorElement.TimelineViewButtonVisible = False
End Sub
Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
Me.PrintScheduler(Me.RadScheduler1)
End Sub
Private Sub PrintScheduler(radScheduler As RadScheduler)
Dim doc As RadPrintDocument = New RadPrintDocument
doc.AssociatedObject = radScheduler
Dim schedulerPrintStyle As Telerik.WinControls.UI.SchedulerPrintStyle = Nothing
Select Case Me.RadScheduler1.ActiveViewType
Case SchedulerViewType.Day
schedulerPrintStyle = New SchedulerDailyPrintStyle()
'schedulerPrintStyle = New CustomRadSchedulerDailyPrintStyle()
Case SchedulerViewType.Week, SchedulerViewType.WorkWeek
schedulerPrintStyle = New SchedulerWeeklyCalendarPrintStyle()
'schedulerPrintStyle = New CustomSchedulerWeeklyCalendarPrintStyle()
End Select
schedulerPrintStyle.DateStartRange = radScheduler.ActiveView.StartDate
schedulerPrintStyle.DateEndRange = radScheduler.ActiveView.EndDate
schedulerPrintStyle.TimeStartRange = TimeSpan.FromMinutes(5)
schedulerPrintStyle.TimeEndRange = TimeSpan.FromHours(23).Add(TimeSpan.FromMinutes(59))
schedulerPrintStyle.AppointmentFont = New Font("Consolas", 8.5)
schedulerPrintStyle.GroupType = SchedulerPrintGroupType.Resource
AddHandler schedulerPrintStyle.CellElementFormatting, AddressOf radSchedWork_PrintSchedulerCellElementFormatting
radScheduler.PrintStyle = schedulerPrintStyle
radScheduler.PrintPreview()
End Sub
Private Sub radSchedWork_PrintSchedulerCellElementFormatting(sender As Object, e As PrintSchedulerCellEventArgs)
e.CellElement.BackColor = Color.White
e.CellElement.DrawFill = False
Dim cell As SchedulerPrintCellElement = TryCast(e.CellElement, SchedulerPrintCellElement)
If cell IsNot Nothing Then
Dim msg As String = "PrintSchedulerCellElementFormatting for Date {0}"
Debug.Print(String.Format(msg, e.CellElement.Date))
'If cell.DateFormat = "hh:mm" Then
' cell.DateFormat = "hh:mm tt"
'ElseIf cell.DateFormat = "dd MMM" Then
' cell.DateFormat = "dd ddd"
'Else
e.CellElement.DrawFill = True
If e.CellElement.[Date].Hour Mod 2 = 0 Then
If e.CellElement.[Date].Day Mod 2 = 0 Then
e.CellElement.BackColor = Color.LightSalmon
Else
e.CellElement.BackColor = Color.LightBlue
End If
Else
e.CellElement.BackColor = Color.LightGreen
End If
'End If
End If
End Sub
Private Sub RadScheduler1_CellFormatting(sender As Object, e As SchedulerCellEventArgs) Handles RadScheduler1.CellFormatting
'reset all properties for cells that may be changed here
e.CellElement.BackColor = Color.White
e.CellElement.DrawFill = False
If e.CellElement.[Date].Hour Mod 2 = 0 Then
e.CellElement.DrawFill = True
If e.CellElement.[Date].Day Mod 2 = 0 Then
e.CellElement.BackColor = Color.LightSalmon
Else
e.CellElement.BackColor = Color.LightBlue
End If
Else
e.CellElement.BackColor = Color.LightGreen
End If
End Sub
End Class
Workaround: Private Sub PrintScheduler(radScheduler As RadScheduler)
Dim doc As RadPrintDocument = New RadPrintDocument
doc.AssociatedObject = radScheduler
Dim schedulerPrintStyle As Telerik.WinControls.UI.SchedulerPrintStyle = Nothing
Select Case Me.RadScheduler1.ActiveViewType
Case SchedulerViewType.Day
'schedulerPrintStyle = New SchedulerDailyPrintStyle()
schedulerPrintStyle = New CustomRadSchedulerDailyPrintStyle()
Case SchedulerViewType.Week, SchedulerViewType.WorkWeek
'schedulerPrintStyle = New SchedulerWeeklyCalendarPrintStyle()
schedulerPrintStyle = New CustomSchedulerWeeklyCalendarPrintStyle()
End Select
schedulerPrintStyle.DateStartRange = radScheduler.ActiveView.StartDate
schedulerPrintStyle.DateEndRange = radScheduler.ActiveView.EndDate
schedulerPrintStyle.TimeStartRange = TimeSpan.FromMinutes(5)
schedulerPrintStyle.TimeEndRange = TimeSpan.FromHours(23).Add(TimeSpan.FromMinutes(59))
schedulerPrintStyle.AppointmentFont = New Font("Consolas", 8.5)
schedulerPrintStyle.GroupType = SchedulerPrintGroupType.Resource
AddHandler schedulerPrintStyle.CellElementFormatting, AddressOf radSchedWork_PrintSchedulerCellElementFormatting
radScheduler.PrintStyle = schedulerPrintStyle
radScheduler.PrintPreview()
End Sub
Public Class CustomRadSchedulerDailyPrintStyle
Inherits SchedulerDailyPrintStyle
Private currentPage As Integer
Public Overrides Sub DrawPage(graphics As Graphics, drawingArea As Rectangle, pageNumber As Integer)
Me.currentPage = pageNumber
MyBase.DrawPage(graphics, drawingArea, pageNumber)
End Sub
Protected Overrides Sub DrawCells(appArea As Rectangle, graphics As Graphics)
Dim currentDate = Me.GetPageDate(Me.currentPage)
Dim rowCount As Single = Math.Max(1, CInt(Math.Ceiling((TimeEndRange - TimeSpan.FromHours(TimeStartRange.Hours)).TotalHours)))
Dim rowHeight As Single = CSng(appArea.Height) / rowCount
For row As Integer = 0 To rowCount - 1
Dim headerCellRect As New RectangleF(appArea.X, appArea.Y + row * rowHeight, Me.HoursColumnWidth, rowHeight)
Dim element As New SchedulerPrintCellElement()
element.DrawBorder = True
element.Font = Me.DateHeadingFont
element.[Date] = currentDate.AddHours(CInt(TimeStartRange.Add(TimeSpan.FromHours(row)).TotalHours))
element.DateFormat = "hh:mm"
element.TextAlignment = ContentAlignment.TopRight
Me.DrawCell(element, graphics, headerCellRect)
element.DrawText = False
Dim numberOfSubRows As Integer = 1
If Me.Scheduler.ActiveViewType = SchedulerViewType.Day OrElse Me.Scheduler.ActiveViewType = SchedulerViewType.MultiDay OrElse Me.Scheduler.ActiveViewType = SchedulerViewType.Week OrElse Me.Scheduler.ActiveViewType = SchedulerViewType.WorkWeek Then
numberOfSubRows = 60 / CInt(DirectCast(Me.Scheduler.ActiveView, SchedulerDayViewBase).RangeFactor)
End If
For i As Integer = 0 To numberOfSubRows - 1
Dim rect As New RectangleF(appArea.X + HoursColumnWidth, appArea.Y + row * rowHeight + rowHeight / numberOfSubRows * i, appArea.Width - HoursColumnWidth, rowHeight / numberOfSubRows)
If i = numberOfSubRows - 1 Then
rect.Height += (appArea.Y + (row + 1) * rowHeight) - (rect.Y + rect.Height)
End If
Me.DrawCell(element, graphics, rect)
Next
Next
End Sub
End Class
Public Class CustomSchedulerWeeklyCalendarPrintStyle
Inherits SchedulerWeeklyCalendarPrintStyle
Protected Overrides Sub DrawCells(appArea As RectangleF, graphics As Graphics, pageNumber As Integer)
Dim days As Integer = Me.GetNumberOfDays(pageNumber)
Dim currentDate As DateTime = Me.GetPageDate(pageNumber)
If Me.TwoPagesPerWeek AndAlso pageNumber Mod 2 = 0 Then
'page numbers are 1-based
currentDate = currentDate.AddDays(Me.GetNumberOfDays(pageNumber - 1))
End If
Dim rowCount As Single = Math.Max(1, CInt(Math.Ceiling((TimeEndRange - TimeSpan.FromHours(TimeStartRange.Hours)).TotalHours)))
Dim rowHeight As Single = CSng(appArea.Height) / rowCount
Dim columnWidth As Single = (appArea.Width - Me.HoursColumnWidth) / CSng(days)
For row As Integer = 0 To rowCount - 1
Dim headerCellRect As New RectangleF(appArea.X, appArea.Y + row * rowHeight, Me.HoursColumnWidth, rowHeight)
Dim element As New SchedulerPrintCellElement()
element.DrawBorder = True
element.Font = Me.DateHeadingFont
element.[Date] = DateTime.Today.AddHours(CInt(TimeStartRange.Add(TimeSpan.FromHours(row)).TotalHours))
element.[Date] = currentDate.AddHours(CInt(TimeStartRange.Add(TimeSpan.FromHours(row)).TotalHours))
element.DateFormat = "hh:mm"
element.TextAlignment = ContentAlignment.TopRight
Me.DrawCell(element, graphics, headerCellRect)
element.DrawText = False
Dim numberOfSubRows As Integer = 60 / CInt(DirectCast(Me.Scheduler.ActiveView, SchedulerDayViewBase).RangeFactor)
For i As Integer = 0 To numberOfSubRows - 1
Dim rect As New RectangleF(appArea.X + HoursColumnWidth, appArea.Y + row * rowHeight + rowHeight / numberOfSubRows * i, appArea.Width - HoursColumnWidth, rowHeight / numberOfSubRows)
If i = numberOfSubRows - 1 Then
rect.Height += (appArea.Y + (row + 1) * rowHeight) - (rect.Y + rect.Height)
End If
Me.DrawCell(element, graphics, rect)
Next
For j As Integer = 0 To days - 1
element = New SchedulerPrintCellElement()
element.DrawBorder = True
element.DrawText = False
element.[Date] = currentDate.AddDays(j).AddHours(CInt(TimeStartRange.Add(TimeSpan.FromHours(row)).TotalHours))
Dim rect As New RectangleF(appArea.X + HoursColumnWidth + j * columnWidth, appArea.Y + row * rowHeight, columnWidth, rowHeight)
Me.DrawCell(element, graphics, rect)
Next
Next
End Sub
End Class
When you create an appointment that starts on 30 November and ends at 00:00 on 1 December, the appointment time slot is extended to the next day. This happens when it is the end of the previous month and the beginning of the next one.
Please refer to the attached sample gif file illustrating how to reproduce the problem with the Demo Application.
Workaround: if the end time is at midnight, reduce the duration with one minute.
private void radScheduler1_AppointmentAdded(object sender, Telerik.WinControls.UI.AppointmentAddedEventArgs e)
{
if (e.Appointment.End.Hour==0 && e.Appointment.End.Minute==0)
{
e.Appointment.End = e.Appointment.End.AddMinutes(-1);
}
}
To reproduce: use the following code
Sub New()
InitializeComponent()
AddHandler Me.RadScheduler1.ActiveViewChanged, AddressOf ActiveViewChanged
Me.RadScheduler1.ActiveViewType = Telerik.WinControls.UI.SchedulerViewType.Week
End Sub
Private Sub ActiveViewChanged(sender As Object, e As Telerik.WinControls.UI.SchedulerViewChangedEventArgs)
Dim dayView As SchedulerDayViewBase = TryCast(Me.RadScheduler1.ActiveView, SchedulerDayViewBase)
Dim dayViewElement As SchedulerDayViewElement = TryCast(Me.RadScheduler1.SchedulerElement.ViewElement, SchedulerDayViewElement)
If dayViewElement IsNot Nothing Then
Dim ruler As RulerPrimitive = dayViewElement.DataAreaElement.Ruler
ruler.StartScale = 6
ruler.EndScale = 22
dayView.WorkTime = New TimeInterval(TimeSpan.FromHours(13), TimeSpan.FromHours(16))
End If
End Sub
When you run the project you will notice that the work time starts from 19:00 to 22:00. When you switch between DayView and WeekView, the ruler is not aligned with the scheduler cells as well. The attached gif file illustrates the incorrect behavior.
Workaround: use the RulerStartScale and RulerEndScale of the SchedulerDayViewBase
Sub New()
InitializeComponent()
AddHandler Me.RadScheduler1.ActiveViewChanged, AddressOf ActiveViewChanged
Me.RadScheduler1.ActiveViewType = Telerik.WinControls.UI.SchedulerViewType.Week
End Sub
Private Sub ActiveViewChanged(sender As Object, e As Telerik.WinControls.UI.SchedulerViewChangedEventArgs)
Dim dayView As SchedulerDayViewBase = TryCast(Me.RadScheduler1.ActiveView, SchedulerDayViewBase)
If dayView IsNot Nothing Then
dayView.RulerStartScale = 6
dayView.RulerEndScale = 22
dayView.WorkTime = New TimeInterval(TimeSpan.FromHours(13), TimeSpan.FromHours(16))
End If
End Sub
Currently, the control lacks such support and when this culture is used an exception is thrown. To reproduce use the sample project and press the navigator's Next button several times.
StackTrace:
System.ArgumentOutOfRangeException occurred
HResult=-2146233086
Message=Year, Month, and Day parameters describe an un-representable DateTime.
Source=mscorlib
StackTrace:
at System.DateTime.DateToTicks(Int32 year, Int32 month, Int32 day)
at Telerik.WinControls.UI.DateHelper.GetEndOfMonth(DateTime date, DateTimeFormatInfo dateTimeFormat)
at Telerik.WinControls.UI.DateHelper.GetMonthDisplayWeeks(DateTime date, DateTimeFormatInfo dateTimeFormat)
at Telerik.WinControls.UI.SchedulerNavigatorElement.NavigateBackwards()
at Telerik.WinControls.UI.SchedulerNavigatorElement.OnNavigateBackwards(Object sender, EventArgs e)
at Telerik.WinControls.UI.SchedulerNavigatorElement.NavigateButton_Click(Object sender, EventArgs e)
at System.EventHandler.Invoke(Object sender, EventArgs e)
at Telerik.WinControls.RadElement.OnClick(EventArgs e)
at Telerik.WinControls.UI.RadButtonItem.OnClick(EventArgs e)
at Telerik.WinControls.UI.RadButtonElement.OnClick(EventArgs e)
at Telerik.WinControls.RadElement.DoClick(EventArgs e)
at Telerik.WinControls.RadElement.RaiseBubbleEvent(RadElement sender, RoutedEventArgs args)
at Telerik.WinControls.RadItem.RaiseBubbleEvent(RadElement sender, RoutedEventArgs args)
at Telerik.WinControls.RadElement.RaiseRoutedEvent(RadElement sender, RoutedEventArgs args)
at Telerik.WinControls.RadElement.RaiseBubbleEvent(RadElement sender, RoutedEventArgs args)
at Telerik.WinControls.RadItem.RaiseBubbleEvent(RadElement sender, RoutedEventArgs args)
at Telerik.WinControls.RadElement.RaiseRoutedEvent(RadElement sender, RoutedEventArgs args)
at Telerik.WinControls.RadElement.DoMouseUp(MouseEventArgs e)
at Telerik.WinControls.ComponentInputBehavior.OnMouseUp(MouseEventArgs e)
at Telerik.WinControls.RadControl.OnMouseUp(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at Telerik.WinControls.RadControl.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at SchedulerShamsiTest.Program.Main() in c:\Users\dyordano\Desktop\RadSchedulerFixPersianLocale (1)\SchedulerShamsiTest\Program.cs:line 19
InnerException:
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