Completed
Last Updated: 12 Sep 2016 05:33 by ADMIN
Note: If you open the context menu over a recurring  appointment and select "Edit Appointment", when the EditAppointmentDialogis shown, the EditRecurrenceDialog is shown as well. But when the EditAppointmentDialog is shown by double clicking, the EditRecurrenceDialog  is not opened at all.

Workaround:
 this.radScheduler1.SchedulerInputBehavior = new CustomBehavior(this.radScheduler1);

public class CustomBehavior : SchedulerInputBehavior
{ 
    public CustomBehavior(RadScheduler scheduler) : base(scheduler)
    {
    }

    public override bool HandleAppointmentElementDoubleClick(object sender, EventArgs args)
    {
        MouseEventArgs mouseArgs = args as MouseEventArgs;
        if (mouseArgs == null || mouseArgs.Button != MouseButtons.Left)
        {
            return false;
        }
        FieldInfo fi = typeof(SchedulerInputBehavior).GetField("beginEditTimer", BindingFlags.NonPublic| BindingFlags.Instance);
        Timer beginEditTimer = fi.GetValue(this) as Timer;
        beginEditTimer.Stop();

        if (!this.Scheduler.ReadOnly && sender is AppointmentElement)
        {
            AppointmentElement app = sender as AppointmentElement; 
            this.Scheduler.ShowAppointmentEditDialog(app.Appointment, app.Appointment.MasterEvent != null);
        }

        return false;
    }
}
Unplanned
Last Updated: 19 Feb 2018 13:46 by ADMIN
To reproduce:
this.radScheduler1.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
this.radScheduler1.Appointments.Add(new Appointment(DateTime.Now, TimeSpan.FromHours(2), "آقای حقیقت"));

Please refer to the attached screenshot.

Workaround:

private void radScheduler1_AppointmentFormatting(object sender, SchedulerAppointmentEventArgs e)
{ 
    e.AppointmentElement.UseHtml = false; 
}
Unplanned
Last Updated: 30 Mar 2016 13:02 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
0
To reproduce:

public Form1()
{
    InitializeComponent(); 

    this.radScheduler1.Appointments.Add(new Appointment(DateTime.Today.AddHours(1),TimeSpan.FromHours(3),"Meeting"));
    this.radScheduler1.ActiveViewType = SchedulerViewType.Week;
    this.radScheduler1.GetWeekView().RangeFactor = ScaleRange.HalfHour;
    this.radScheduler1.SchedulerElement.DragDropBehavior.AutoScrollDayViewOnDrag = true;
    this.Size = new Size(800, 350);
}

It's necessary to stretch down the application so that a few hours are shown (let's say 4 hours) and the appointment is a bit less, for example 3 hours. If you look at the gif, I am scrolling down around 14, then I'm stopping a bit, while always keeping the mouse button pressed, and then I start scrolling up: at that time the scroll results in going down until 19, instead of going up.

Workaround:
 this.radScheduler1.SchedulerElement.DragDropBehavior = new CustomAppointmentDraggingBehavior(this.radScheduler1.SchedulerElement);

public class CustomAppointmentDraggingBehavior : AppointmentDraggingBehavior
{ 
    public CustomAppointmentDraggingBehavior(SchedulerVisualElement activeOwner) : base(activeOwner)
    {
    }

    protected override void HandleMouseMove(Point mousePos)
    {
     
        base.HandleMouseMove(mousePos);
        
        DayViewAppointmentsTable table = this.ActiveOwner.Scheduler.DragDropBehavior.ActiveOwner as DayViewAppointmentsTable;

        if (table != null && this.ActiveOwner.Scheduler.DragDropBehavior.AutoScrollDayViewOnDrag)
        {
            Point pt = table.PointFromScreen(Control.MousePosition);
            FieldInfo fi = typeof(DayViewAppointmentsTable).GetField("lastMovingPoint", System.Reflection.BindingFlags.NonPublic 
                | System.Reflection.BindingFlags.Instance);
            fi.SetValue(table, pt);
        }
    }
}
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);
            }
        }
    }
Unplanned
Last Updated: 07 Jun 2018 10:01 by ADMIN
To reproduce:
 public Form1()
 {
     InitializeComponent();

     for (int i = 0; i < 7; i++)
     {
         this.radScheduler1.Appointments.Add(new Appointment(DateTime.Now.AddHours(i),TimeSpan.FromHours(3),"App" + i));
     }
     this.radScheduler1.AutoSizeAppointments = true;
     this.radScheduler1.ActiveViewType = SchedulerViewType.Month;
     SchedulerMonthView monthView = this.radScheduler1.GetMonthView();
    
     monthView.EnableAppointmentsScrolling = true;
 }

Workaround: set the AutoSizeAppointments property to false.
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.
Unplanned
Last Updated: 30 Mar 2016 13:01 by ADMIN
Workaround: subscribe to the PanGesture event and set the StartDate property of the current view to the desired new date.
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: 29 Jun 2016 06:36 by ADMIN
To reproduce:
DateTime dtStart = DateTime.Today.AddDays(2).AddHours(10); 
DateTime dtEnd = DateTime.Today.AddDays(2).AddHours(12); 
Appointment appointment = new Appointment(dtStart, dtEnd, "TEST", "Description"); 
this.radScheduler1.Appointments.Add(appointment); 

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ar-SA");

Try to open the edit dialog.


Workaround: create a custom dialog that inherits  RadSchedulerDialog and implements IEditAppointmentDialog. Thus, you will be able to handle the whole edit operation.

public class Scheduler : RadScheduler
{
    protected override IEditAppointmentDialog CreateAppointmentEditDialog()
    {
        return new MyDialog();
    }

    public override string ThemeClassName  
    { 
        get 
        { 
            return typeof(RadScheduler).FullName;  
        }
    }
}

public partial class MyDialog : RadSchedulerDialog, IEditAppointmentDialog
{
    public MyDialog()
    {
        InitializeComponent();
    }

    Appointment appointment;

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e); 

        //an example how specify the start date
        RadDateTimePicker dtStart = this.Controls[0] as RadDateTimePicker;
        dtStart.Value = this.appointment.Start;
    }
   
    public void ShowRecurrenceDialog()
    {
        //ToDo
    }

    public bool EditAppointment(Telerik.WinControls.UI.IEvent appointment, Telerik.WinControls.UI.ISchedulerData schedulerData)
    {
        this.appointment = appointment as Appointment;

        return true;
    }
}
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: 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: 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: 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.
Declined
Last Updated: 10 Apr 2015 11:33 by ADMIN
Created by: Aron
Comments: 1
Category: Scheduler/Reminder
Type: Feature Request
1
Add AgendaView to the winforms RadScheduler.
(Seeing as the view exists in the ASP version of the RadScheduler).
Completed
Last Updated: 19 Aug 2020 11:46 by ADMIN
Release R3 2018
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 2
Category: Scheduler/Reminder
Type: Feature Request
2

			
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: 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.