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.
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: 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();
}
Declined
Last Updated: 13 Jan 2015 15:45 by ADMIN
Hi

When using group view we need the reminders to be shown for a selected (set programitically) resource. At the moment it shows reminders for all resources that have appointments that need reminding. In our case we have users who have scheduler open in group view showing multiple resources but would only like to be reminded about appointments that are for the user using the system.
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.
Completed
Last Updated: 03 Dec 2014 11:57 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
1
To reproduce:

1. Open Demo application >> Scheduler >> Printing example.

2. Change to Weekly style and return back to Daily style.

3. Modify a random appointment's end time to be half an hour, e.g. 10:30.

4. Change  the rule scale to 5 minute and press PrintPreview button.

You will notice that the rendered appointment in the PrintPreview dialog fills the entire hour interval, instead of half of it.

public Form1()
{
    InitializeComponent();
    this.radScheduler1.PrintStyle = new CustomSchedulerDailyPrintStyle();
}

public class CustomSchedulerDailyPrintStyle :SchedulerDailyPrintStyle
{
    protected override void DrawAppointments(DateTime currentDate, IResource resource, Rectangle appArea, Graphics graphics)
    {
        int rowCount = Math.Max(1, (int)Math.Ceiling((TimeEndRange - TimeSpan.FromHours(TimeStartRange.Hours)).TotalHours));
        float rowHeight = (float)appArea.Height / rowCount;

        List<IEvent> appointments = this.GetAppointments(currentDate, false, resource);

        appointments.Sort(CompareAppointments);
        bool setColumn = true;
        Dictionary<IEvent, int> columns = new Dictionary<IEvent, int>();
        Dictionary<IEvent, int> maxColumns = new Dictionary<IEvent, int>();
        int currentColumn = 0;

        while (setColumn)
        {
            setColumn = false;
            DateTime currentTime = DateTime.MinValue;

            foreach (IEvent app in appointments)
            {
                if (!columns.ContainsKey(app) && DateFloor(app.Start) >= currentTime)
                {
                    setColumn = true;
                    columns.Add(app, currentColumn);
                    currentTime = DateCeiling(app.End);
                }
            }

            currentColumn++;
        }

        DateTime maxEndDate = DateTime.MinValue;
        int lastIndex = 0;
        int maxColumn = 0;

        for (int i = 0; i <= appointments.Count; i++)
        {
            if (i == appointments.Count || DateFloor(appointments[i].Start) >= maxEndDate)
            {
                for (int j = lastIndex; j < i; j++)
                {
                    maxColumns.Add(appointments[j], maxColumn);
                }

                maxColumn = 0;
                lastIndex = i;
            }

            if (i == appointments.Count)
            {
                break;
            }

            maxColumn = Math.Max(maxColumn, columns[appointments[i]]);
            if (maxEndDate < DateCeiling(appointments[i].End))
            {
                maxEndDate = DateCeiling(appointments[i].End);
            }
        }

        foreach (IEvent app in appointments)
        {
            AppointmentPrintElement printedAppointment = new AppointmentPrintElement(app, this.Scheduler);
            printedAppointment.ShowHours = false;
            printedAppointment.DrawBorder = printedAppointment.DrawFill = true;

            float appY = appArea.Y + Math.Max(0, (float)(((DateFloor(printedAppointment.Start) - currentDate.Add(this.TimeStartRange)).TotalHours) * rowHeight));
            float appBottom = appArea.Y + Math.Min(appArea.Height, (float)(((DateCeiling(printedAppointment.End) - currentDate.Add(this.TimeStartRange)).TotalHours) * rowHeight));
            float appHeight = appBottom - appY - app.End.Minute;
            float appWidth = (appArea.Width - HoursColumnWidth) / (maxColumns[app] + 1);
            float appX = appArea.X + HoursColumnWidth + columns[app] * appWidth;

            RectangleF appRect = new RectangleF(appX, appY, appWidth, appHeight);
            appRect.Inflate(-2f, -2f);
            this.DrawAppointment(printedAppointment, graphics, appRect);
        }
    }
}

private void radButton1_Click(object sender, EventArgs e)
{
    this.radScheduler1.PrintPreview();
}
Completed
Last Updated: 26 Nov 2014 14:18 by ADMIN
Add Reminder property to the AppointmentMappingInfo class.
Completed
Last Updated: 12 Nov 2014 14:00 by ADMIN
ADMIN
Created by: Nikolay
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
0
An AppointmentChanged event should be added to RadScheduler that can be handled in VB.NET by the 'Handles' approach.

Resolution: 
The AppointmentChanged event is added which is the Appointments.CollectionChanged event with ItemChanged action.
Declined
Last Updated: 21 Oct 2014 08:29 by ADMIN
DECLINED: RadScheduler already supports saving/loading exceptions (set via the MasterEventId mapping property). The issue here seems to be in the database setup but the information provided is insufficient to reproduce the case. 

1) Create new reccuring appointment
2) Open some occurrence of created reccuring appointment
3) Change end date, click OK
Here will be first problem - reccuring on this occurence icon not changed (see attached screenshot).
4) Save data to DB
5) Try do delete saved occurence of reccuring appointment
6) Save data to DB
Here is the second problem - this will not delete.
Completed
Last Updated: 16 Oct 2014 17:06 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
1
If your current time is 9:30 AM and you have an appointment in 11:00 AM with reminder 6 hours, the alarm popup should be displayed at 5:00 AM. When you run the application and show the scheduler, the reminder pop up appears immediately. This behavior is expected. However, if you snooze the event with 1 hour, it is expected that the reminder for this appointment will not popup the next hour. However, the RadScheduler makes the following calculation: reminder start time - reminder value + snooze time = 11:00 - 6 + 1 = 6:00. Hence, the reminder popup shows immediately as the current time is 9:30h.
Completed
Last Updated: 16 Oct 2014 16:08 by ADMIN
To reproduce:

Add appointments to TimelineView so that they create a vertical scrollbar. Scroll to bottom and click at the last appointment, you will see that the scrollbar will return back to the start and will hide for a moment

Workaround:

Use the following custom scheduler:

public class Myscheduler : RadScheduler
{
    public override string ThemeClassName
    {
        get
        {
            return typeof(RadScheduler).FullName;
        }
        set
        {
            base.ThemeClassName = value;
        }
    }

    protected override RadSchedulerElement CreateRadSchedulerElement()
    {
        return new MySchedulerElement(this, this.ActiveView);
    }

}

class MySchedulerElement : RadSchedulerElement
{
    public MySchedulerElement(RadScheduler scheduler, SchedulerView view)
        : base(scheduler, view)
    { }

    protected override SchedulerViewElement CreateViewElement()
    {
        if (this.Scheduler.ActiveViewType == SchedulerViewType.Timeline && this.Scheduler.GroupType == GroupType.None)
        {
            return new MyTimelineViewElement(this.Scheduler, this.View);
        }

        return base.CreateViewElement();
    }
}

class MyTimelineViewElement : SchedulerTimelineViewElement
{
    public MyTimelineViewElement(RadScheduler scheduler, SchedulerView view)
        : base(scheduler, view)
    {
    }

    protected override void UpdateVeticalScroll(float presenterHeight, float appointmentsMaxHeight)
    {
        base.UpdateVeticalScroll(presenterHeight, appointmentsMaxHeight + this.VScrollBar.Value);
    }
}
Completed
Last Updated: 16 Oct 2014 15:05 by ADMIN
Please refer to the attached file.
Completed
Last Updated: 15 Oct 2014 15:04 by ADMIN