Completed
Last Updated: 10 Feb 2016 09:24 by ADMIN
Please refer to the attached file.

Workaround: clear remind objects when the appointment is changed:
private void radScheduler1_AppointmentChanged(object sender, AppointmentChangedEventArgs e)
{
    schedulerReminder.ClearRemindObjects();        
    foreach (Appointment a in this.radScheduler1.Appointments)
            {
                schedulerReminder.AddRemindObject(a);
            }  
}
Completed
Last Updated: 28 Dec 2015 15:21 by ADMIN
ADMIN
Created by: Georgi I. Georgiev
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
1
To reproduce: 
Add a RadScheduler to a form and try the following method : 
private void Scroll() 
 { 
     SchedulerDayView dayView = radScheduler1.GetDayView(); 
     SchedulerWeekView weekView = radScheduler1.GetWeekView(); 
     dayView.RulerStartScale = 7; dayView.RulerEndScale = 22; 
     if (radScheduler1.ActiveViewType == SchedulerViewType.Day) 
       { 
          if (dayView != null) 
             { 
                dayView.RangeFactor = ScaleRange.QuarterHour; 
             } 
       } 
       else  if (radScheduler1.ActiveViewType == SchedulerViewType.Week) 
       {
         if (weekView != null) 
             { weekView.RangeFactor = ScaleRange.QuarterHour; 
             } 
       } 

dayView.RulerTimeFormat = RulerTimeFormat.hours24; 
SchedulerDayViewElement dayViewElement = this.radScheduler1.SchedulerElement.ViewElement as SchedulerDayViewElement; 
if (dayViewElement != null)
 { 
      dayViewElement.DataAreaElement.Table.ScrollToTime(new TimeSpan(DateTime.Now.Hour, 0, 0)); 
  } 
} 

As you can see the scroll is not correct.
Completed
Last Updated: 22 Dec 2015 07:59 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
1
To reproduce: use a German TimeZone

1. Create a recurring appointment with a yearly recurrence rule on the last Sunday of October.
2. Export to iCal. As a result, the TimeZone information is not correct. 

The exported RRULE BYSETPOS=5  defines the 5th Sunday. This is wrong. There may be a year with 5 Sundays in March/October but that is not true for every year. The correct encoding for ics files is BYSETPOS=-1. This indicates the last Sunday of a month. The other error is the DTSTART:16010101T030000 and DTSTART:00010101T020000. The German daylight rule is valid since 1996, not since 1601 or year 1. 
Note: German timezone defines the switch to daylight saving time as
- start on last Sunday in March at 03:00
- end on last Sunday in October at 02:00
This rule is valid since 1996.

Alert: Events created in RadScheduler for the last Sunday of a month are correct! The rule here is exported as expected and contains BYSETPOS=-1:
Completed
Last Updated: 30 Nov 2015 12:15 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 3
Category: Scheduler/Reminder
Type: Bug Report
0
To reproduce:

public Form1()
{
    InitializeComponent();

    Appointment a1 = new Appointment(new DateTime(2015, 03, 04, 10, 30, 0), TimeSpan.FromMinutes(30), "A1");
    Appointment a2 = new Appointment(new DateTime(2015, 03, 04, 11, 00, 0), TimeSpan.FromMinutes(30), "A2");
    Appointment a3 = new Appointment(new DateTime(2015, 03, 04, 11, 30, 0), TimeSpan.FromMinutes(30), "A3");
    this.radScheduler1.Appointments.Add(a1);
    this.radScheduler1.Appointments.Add(a2);
    this.radScheduler1.Appointments.Add(a3);
    DateTime currentDate = new DateTime(2015, 03, 03, 09, 00, 10);

    this.radScheduler1.FocusedDate = currentDate;
    SchedulerTimelineView timelineView = radScheduler1.GetTimelineView();
    timelineView.ShowTimescale(Timescales.Minutes);
    timelineView.RangeStartDate = currentDate.AddMonths(-3);
    timelineView.RangeEndDate = currentDate.AddMonths(3);
    timelineView.GetScaling().DisplayedCellsCount = 10;
}

Workaround: Use the date part only:
 DateTime currentDate = new DateTime(2015, 03, 03, 09, 00, 10);
 currentDate = currentDate.Date;

Completed
Last Updated: 21 Oct 2015 12:44 by ADMIN
To reproduce: 

1. Follow the steps for creating custom Appointment as it is demonstrated here: http://www.telerik.com/help/winforms/scheduler-appointments-and-dialogs-adding-a-custom-field-to-the-editappointment-dialog.html
2. Create a new Appointment and press Ctrl+C to copy the selected custom appointment.
3. Press Ctrl+V to paste. You will notice that the pasted appointment is from the default type, not the custom one.

Workaround:

this.radScheduler1.AppointmentsCopying += radScheduler1_AppointmentsCopying;
this.radScheduler1.AppointmentsPasting += radScheduler1_AppointmentsPasting;

private void radScheduler1_AppointmentsCopying(object sender, SchedulerClipboardEventArgs e)
{
    email = ((AppointmentWithEmail)this.radScheduler1.SelectionBehavior.SelectedAppointments.First()).Email;
}

private void radScheduler1_AppointmentsPasting(object sender, SchedulerClipboardEventArgs e)
{
    e.Cancel = true;
    if (e.Format == "ICal")
    {
        DataObject clipboardObject = Clipboard.GetDataObject() as DataObject;
        if (clipboardObject == null)
        {
            return;
        }
        string ical = Convert.ToString(clipboardObject.GetData(RadScheduler.ICalendarDataFormat));
        bool pasteResult = PasteFromICal(ical);
    }
}
 
private bool PasteFromICal(string ical)
{
    SchedulerICalendarImporter importer = new SchedulerICalendarImporter( this.radScheduler1.AppointmentFactory);
    
    SnapshotAppointmentsSchedulerData data = new SnapshotAppointmentsSchedulerData(this.radScheduler1, null);
    importer.Import(data, ical);

    ISchedulerStorage<IEvent> storage = data.GetEventStorage();
    if (storage == null || storage.Count == 0)
    {
        return false;
    }
    IEnumerator<IEvent> enumerator = storage.GetEnumerator();
    enumerator.MoveNext();
    TimeSpan pasteOffset = this.radScheduler1.SelectionBehavior.SelectionStartDate - enumerator.Current.Start;
    enumerator.Dispose();

    foreach (IEvent appointment in storage)
    {
        TimeSpan oldDuration = appointment.Duration;
        appointment.Start = appointment.Start.Add(pasteOffset);
        appointment.Duration = oldDuration;
        appointment.UniqueId = new EventId(Guid.NewGuid());
        ((AppointmentWithEmail)appointment).Email = email;
        if (appointment.RecurrenceRule != null && appointment.Exceptions != null)
        {
            foreach (IEvent exception in appointment.Exceptions)
            {
                oldDuration = exception.Duration;
                exception.Start = exception.Start.Add(pasteOffset);
                exception.Duration = oldDuration;
                exception.UniqueId = new EventId(Guid.NewGuid());
            }
        }

        if (this.radScheduler1.GroupType == GroupType.Resource)
        {
            appointment.ResourceId = this.radScheduler1.SelectionBehavior.SelectedResourceId;
        }
    }

    foreach (IEvent appointment in storage)
    {
        this.radScheduler1.Appointments.Add(appointment);
    }

    return true;
}
Completed
Last Updated: 14 Sep 2015 14:16 by ADMIN
Workaround:
 SchedulerBindingDataSource schedulerBindingSource = new SchedulerBindingDataSource();
schedulerBindingSource.EventProvider.ResourceMapperFactory = new MyResourceMapperFactory(schedulerBindingSource);

class MyResourceMapperFactory : Telerik.WinControls.UI.Scheduler.ResourceMapperFactory
    {
        public MyResourceMapperFactory(SchedulerBindingDataSource owner)
            : base(owner)
        { }

        public override Telerik.WinControls.UI.Scheduler.ResourceIdMapper GetResourceMapper(object dataSourceItem, PropertyDescriptor resourceIdDescriptor)
        {
            if (resourceIdDescriptor == null)
            {
                resourceIdDescriptor = GetResourceIdDescriptor(dataSourceItem);
            }

            return base.GetResourceMapper(dataSourceItem, resourceIdDescriptor);
        }

        private PropertyDescriptor GetResourceIdDescriptor(object resourceIdList)
        {
            string resourceIdPropertyName = ((AppointmentMappingInfo)this.OwnerDataSource.EventProvider.Mapping).ResourceId;

            if (string.IsNullOrEmpty(resourceIdPropertyName))
                return null;

            System.Collections.IList list = resourceIdList as System.Collections.IList;
            Type listType = resourceIdList.GetType();

            if (list == null && listType.IsGenericType && listType.GetGenericArguments().Length == 1)
            {
                Type[] genericArguments = listType.GetGenericArguments();
                PropertyDescriptorCollection resourceProperties = TypeDescriptor.GetProperties(genericArguments[0]);
                return resourceProperties.Find(resourceIdPropertyName, true);
            }
            else
            {
                PropertyDescriptorCollection resourceProperties = ListBindingHelper.GetListItemProperties(resourceIdList);
                return resourceProperties.Find(resourceIdPropertyName, true);
            }
        }
    }
Completed
Last Updated: 03 Aug 2015 10:36 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
0
To reproduce:
1. Double click over the scheduler to open the edit dialog.
2. Click the Recurrence button.
3. Check "all day event"
4. Select Yearly recurrence pattern , every January 1st
5. Confirm the appointment.
6. Navigate to the first occurrence, select it and press Delete key. Confirm the deletion.  You will see that the appointment is still visible. However, if you chose the "all day event" from the first edit dialog, everything works as expected.
Completed
Last Updated: 23 Jul 2015 14:30 by ADMIN
To reproduce: use the following code:

public Form1()
{
    InitializeComponent();
    
    Appointment recurringAppointment = new Appointment(DateTime.Now,
        TimeSpan.FromHours(1.0), "Appointment Subject");
    HourlyRecurrenceRule rrule = new HourlyRecurrenceRule(recurringAppointment.Start, 2, 10);
    recurringAppointment.RecurrenceRule = rrule;
    this.radScheduler1.Appointments.Add(recurringAppointment);
}

From the scheduler navigator change the time zone to any zone with "-". You will notice that some of the occurrences disappear.
Completed
Last Updated: 23 Jul 2015 13:35 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
0
To reproduce: use the code snippet from the documentation: http://www.telerik.com/help/winforms/scheduler-views-time-zones.html

SchedulerTimeZone utcPlusOneTimeZone = new SchedulerTimeZone(-60, "UTC + 1");
this.radScheduler1.GetDayView().DefaultTimeZone = utcPlusOneTimeZone;

Woraround: set the time zone by using the SchedulerTimeZone.GetSchedulerTimeZones() list.
Completed
Last Updated: 22 Jun 2015 14:02 by ADMIN
To reproduce: 

1. Add a RadScheduler, a RadSchedulerNavigator and a RadButton. Use the following code and run the project:

private void radButton1_Click(object sender, EventArgs e)
{
    SchedulerTimelineView timelineView = radScheduler1.GetTimelineView(); 
    this.radScheduler1.FocusedDate = new DateTime(DateTime.Now.Year,DateTime.Now.Month,1);
    timelineView.ShowTimescale(Timescales.Weeks);
    this.radScheduler1.SchedulerElement.UpdateCellContainers();
}

2. Switch to Timeline view and change the scaling to Hour.
3. Add and appointment and click the button. You will notice that the appointment is missing.

Workaround: change the FocusedDate after the scaling is changed.
Completed
Last Updated: 12 Jun 2015 10:50 by ADMIN
To reproduce: follow the introduced approach in the following help article: http://www.telerik.com/help/winforms/scheduler-drag-and-drop-drag-and-drop-using-raddragdropservice.html 

When you maximize the form and return it to normal state, the appointment is rendered.

Workaround for Timeline view: after adding the dropped appointment you can refresh the scaling:

this.radSchedulerDemo.Appointments.Add(appointment);
this.radSchedulerDemo.GetTimelineView().ShowTimescale(Timescales.Days);
Completed
Last Updated: 12 Jun 2015 10:10 by ADMIN
To reproduce:

RadScheduler radScheduler1 = new RadScheduler();
SchedulerTimelineView timelineView;

public Form1()
{
    InitializeComponent();
   
    this.Controls.Add(radScheduler1);
    radScheduler1.Dock = DockStyle.Fill;

    Color[] colors = new Color[]
    {
        Color.LightYellow, Color.LightYellow, Color.Red,
        Color.LightYellow, Color.LightYellow, Color.Red,
        Color.LightYellow, Color.LightYellow, Color.LightYellow
    };

    for (int i = 0; i < colors.Length; i++)
    {
        Resource resource = new Resource();
        resource.Id = new EventId(i);
        resource.Name = "Room " + (i + 1).ToString();
        resource.Color = colors[i];
        this.radScheduler1.Resources.Add(resource);
    }
  
    radScheduler1.ActiveViewType = SchedulerViewType.Timeline;
    timelineView = radScheduler1.GetTimelineView();    
    
    TenMinutesTimescale tenMinutes = new TenMinutesTimescale();
    timelineView.SchedulerTimescales.Add(tenMinutes);
    tenMinutes.Visible = true;
    this.radScheduler1.GroupType = GroupType.Resource;
    this.button1.Click += button1_Click;
}

public class TenMinutesTimescale : MinutesTimescale
{
    public override int ScalingFactor
    {
        get
        {
            return 10;
        }
    }
}

private void button1_Click(object sender, EventArgs e)
{  
    timelineView.GetScaling().DisplayedCellsCount += 10;
}


Workaround:

public class MyElementProvider : SchedulerElementProvider
{
    public MyElementProvider(RadScheduler scheduler) : base(scheduler)
    {
    }

    protected override T CreateElement<T>(SchedulerView view, object context)
    {
        if (typeof(T) == typeof(TimelineHeader))
        {
            return new MyTimelineHeader(this.Scheduler, view, context as SchedulerTimelineViewElement)as T;
        }
      
        return base.CreateElement<T>(view, context);
    }
}

public class MyTimelineHeader:TimelineHeader
{
    public MyTimelineHeader(RadScheduler scheduler, SchedulerView view, 
        SchedulerTimelineViewElement timeLineViewElement) : base(scheduler, view, timeLineViewElement)
    {
    }

    protected override SizeF ArrangeOverride(SizeF finalSize)
    {
        List<SchedulerTimescale> allSortedScale = new List<SchedulerTimescale>();
        allSortedScale.Add(new SchedulerTimescale());
        typeof(TimelineHeader).GetField("allSortedScales",
            System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(this, allSortedScale);
        return base.ArrangeOverride(finalSize);
    }
}

public Form1()
{
    InitializeComponent();

   this.radScheduler1.ElementProvider = new MyElementProvider(this.radScheduler1);
    this.Controls.Add(radScheduler1);
    radScheduler1.Dock = DockStyle.Fill;

    Color[] colors = new Color[]
    {
        Color.LightYellow, Color.LightYellow, Color.Red,
        Color.LightYellow, Color.LightYellow, Color.Red,
        Color.LightYellow, Color.LightYellow, Color.LightYellow
    };

    for (int i = 0; i < colors.Length; i++)
    {
        Resource resource = new Resource();
        resource.Id = new EventId(i);
        resource.Name = "Room " + (i + 1).ToString();
        resource.Color = colors[i];
        this.radScheduler1.Resources.Add(resource);
    }
  
    radScheduler1.ActiveViewType = SchedulerViewType.Timeline;
    timelineView = radScheduler1.GetTimelineView();    
    
    TenMinutesTimescale tenMinutes = new TenMinutesTimescale();
     timelineView.SchedulerTimescales.Insert(0, tenMinutes); 
    //timelineView.SchedulerTimescales.Add(tenMinutes);
    tenMinutes.Visible = true;


    this.radScheduler1.GroupType = GroupType.Resource;
    this.button1.Click += button1_Click;
}
Completed
Last Updated: 04 Jun 2015 14:21 by ADMIN
To reproduce :

1. Bind RadScheduler to data base. http://www.telerik.com/help/winforms/scheduler-data-binding-data-binding-walkthrough.html 
2. Specify the  AppointmentMappingInfo.AllDay property to the column in your data base table.
3. When starting the application, the all day appointments are shown correctly. However, if you try to drag the all day appointment to a new time slot and save the changes to your data base, the AllDay property is not stored.

Workaround: before saving the changes ,update the DataBoundItem's AllDay property:

Private Sub AppointmentDropped(sender As Object, e As AppointmentMovedEventArgs)
    Me.RadScheduler1.DataSource.GetEventProvider().Update(e.Appointment, "AllDay")
    SaveScheduler()
End Sub
Completed
Last Updated: 03 Jun 2015 13:22 by ADMIN
To reproduce:
Appointment app = new Appointment(DateTime.Today.AddHours(18), TimeSpan.FromHours(10), "Test");  
this.radScheduler1.Appointments.Add(app);

SchedulerDayView dayView = this.radScheduler1.GetDayView();
dayView.RulerStartScale = 1;
dayView.RulerEndScale = 24;
dayView.DayCount = 2; 
this.radScheduler1.EnableExactTimeRendering = true;
Completed
Last Updated: 25 May 2015 12:02 by ADMIN
If you try to set the AutoSize property to true at run time you will obtain the error illustrated on the attached screenshot.
Completed
Last Updated: 25 Mar 2015 13:09 by ADMIN
To reproduce: 
- Add mapping for the reminder property and try to save it in the database.

Workaround:
appointmentMappingInfo.Reminder = "Reminder";
appointmentMappingInfo.FindBySchedulerProperty("Reminder").ConvertToScheduler = ConvertReminderToScheduler;
appointmentMappingInfo.FindBySchedulerProperty("Reminder").ConvertToDataSource = ConvertReminderToDataSource;

 private object ConvertReminderToDataSource(object item)
private object ConvertReminderToDataSource(object item)
{
    TimeSpan? reminder = item as TimeSpan?;
    if (reminder != null)
    {
        return (int)reminder.Value.TotalMilliseconds;
    }

    return 0;
}

private object ConvertReminderToScheduler(object item)
{
    try
    {
        int value = Convert.ToInt32(item);
        if (value != 0)
        {
            return TimeSpan.FromMilliseconds(value);
        }

        return null;
    }
    catch
    {
        return null;
    }
}
Completed
Last Updated: 25 Mar 2015 12:17 by ADMIN
The recurrence rule has a missing letter "Z" at the end of the start/end values.
Completed
Last Updated: 16 Mar 2015 15:03 by ADMIN
To reproduce:
1. Add several appointments:

 Random rand = new Random();
            for (int i = 0; i < 5; i++)
            {
                Appointment app = new Appointment(DateTime.Now.AddHours(i), TimeSpan.FromMinutes(45), "App" + i);
                app.BackgroundId = this.radScheduler1.Backgrounds[rand.Next(0, radScheduler1.Backgrounds.Count)].Id;
                this.radScheduler1.Appointments.Add(app);
            }
2. On RadButton.Click event try to change the PrintStyle and print the scheduler:
private void radButton1_Click(object sender, EventArgs e)
{
    SchedulerDetailsPrintStyle detailsStyle = new SchedulerDetailsPrintStyle();
    detailsStyle.PageBreakMode = PageBreakMode.Day;
    this.radScheduler1.PrintStyle = detailsStyle;
    
    this.radScheduler1.Print();
}
Completed
Last Updated: 31 Dec 2014 07:08 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 2
Category: Scheduler/Reminder
Type: Bug Report
2
To reproduce:
public Form1()
{
    InitializeComponent();
    List<string> resources = new List<string>();
    for (int index = 1; index <= 30; index++)
    {
        resources.Add("Resource" + index);
    }

    for (int i = 0; i <= resources.Count - 1; i++)
    {
        Resource resource = new Resource();
        resource.Id = new EventId(i);
        resource.Name = resources[i];
        this.RadSchedulerDemo.Resources.Add(resource);
    }

    this.RadSchedulerDemo.GroupType = GroupType.Resource;
    Appointment appointment = null;
    this.RadSchedulerDemo.ActiveViewType = SchedulerViewType.Timeline;
    TimelineGroupingByResourcesElement headerElement = this.RadSchedulerDemo.SchedulerElement.ViewElement as TimelineGroupingByResourcesElement;
    headerElement.ResourceHeaderWidth = 150;
    Random rand = new Random();

    for (int i = 0; i <= 99; i++)
    {
        appointment = new Appointment(DateTime.Now.AddHours(i), new TimeSpan(30), "Summary" + i, "Description" + i, "location" + i);
        appointment.ResourceId = this.RadSchedulerDemo.Resources[rand.Next(0, this.RadSchedulerDemo.Resources.Count)].Id;
        appointment.BackgroundId = Convert.ToInt32(this.RadSchedulerDemo.Backgrounds[rand.Next(0, this.RadSchedulerDemo.Backgrounds.Count)].Id);
        this.RadSchedulerDemo.Appointments.Add(appointment);
    }

    this.RadSchedulerDemo.GetTimelineView().ShowTimescale(Timescales.Hours);
    SchedulerTimescale timescale1 = this.RadSchedulerDemo.GetTimelineView().GetScaling();
    timescale1.DisplayedCellsCount = 30;
    this.RadSchedulerDemo.ActiveView.ResourcesPerView = 10;
}

Try to scroll to the last resource when you ResourcesPerView =2 and when ResourcesPerView =10. You will notice considerable difference in scrolling speed.