Completed
Last Updated: 26 Feb 2018 09:17 by Dimitar
How to reproduce:
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
    public RadForm1()
    {
        InitializeComponent();

        Resource resource1 = new Resource();
        resource1.Id = new EventId(1);
        resource1.Name = "Resource 1";
        resource1.Color = Color.Blue;

        Resource resource2 = new Resource();
        resource2.Id = new EventId(2);
        resource2.Name = "Resource 2";
        resource2.Color = Color.Green;

        Resource resource3 = new Resource();
        resource3.Id = new EventId(3);
        resource3.Name = "Resource 3";
        resource3.Color = Color.Red;

        this.radScheduler1.Resources.Add(resource1);
        this.radScheduler1.Resources.Add(resource2);
        this.radScheduler1.Resources.Add(resource3);
    }

    private void RadForm1_Load(object sender, EventArgs e)
    {
        this.radScheduler1.GroupType = GroupType.Resource;
        ((SchedulerViewGroupedByResourceElementBase)this.radScheduler1.ViewElement).ResourceStartIndex = 2;
    }

    private void radButton1_Click(object sender, EventArgs e)
    {
        this.radScheduler1.Resources.RemoveAt(0);
    }
}


Workaround: 
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
    public RadForm1()
    {
        InitializeComponent();

        Resource resource1 = new Resource();
        resource1.Id = new EventId(1);
        resource1.Name = "Resource 1";
        resource1.Color = Color.Blue;

        Resource resource2 = new Resource();
        resource2.Id = new EventId(2);
        resource2.Name = "Resource 2";
        resource2.Color = Color.Green;

        Resource resource3 = new Resource();
        resource3.Id = new EventId(3);
        resource3.Name = "Resource 3";
        resource3.Color = Color.Red;

        this.radScheduler1.Resources.Add(resource1);
        this.radScheduler1.Resources.Add(resource2);
        this.radScheduler1.Resources.Add(resource3);
    }

    private void RadForm1_Load(object sender, EventArgs e)
    {
        this.radScheduler1.GroupType = GroupType.Resource;
        ((SchedulerViewGroupedByResourceElementBase)this.radScheduler1.ViewElement).ResourceStartIndex = 2;
    }

    private void radButton1_Click(object sender, EventArgs e)
    {
        this.radScheduler1.GroupType = GroupType.None;
        this.radScheduler1.Resources.RemoveAt(0);
        this.radScheduler1.GroupType = GroupType.Resource;
    }
}
Completed
Last Updated: 12 Dec 2017 15:04 by ADMIN
To reproduce: run the sample project and follow the illustrates steps from the gif file.

Workaround: close the tooltip programmatically:

        private void radScheduler1_AppointmentMouseDown(object sender, SchedulerAppointmentMouseEventArgs e)
        {
            if (tooltip != null)
            {
                tooltip.Hide(this.radScheduler1);
            }
        }

        ToolTip tooltip = null;

        private void radScheduler1_ToolTipTextNeeded(object sender, Telerik.WinControls.ToolTipTextNeededEventArgs e)
        {
            AppointmentElement app = sender as AppointmentElement;
            if (app != null)
            {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < 10; i++)
                {
                    sb.AppendLine(app.Appointment.Summary + i + " " + app.Appointment.Summary + i + i + " " + app.Appointment.Summary);
                }
                e.ToolTipText = sb.ToString();
                tooltip = e.ToolTip;
            }
        }
Completed
Last Updated: 09 Jan 2018 13:09 by ADMIN
Unplanned
Last Updated: 07 Nov 2017 15:21 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
2
Run the application on a Windows 10 machine and scroll to the bottom. Please refer to the attached gif file.
Completed
Last Updated: 28 Nov 2017 06:45 by ADMIN
This feature is required for OpenEdge scenarios. 

A common case is that the resource_id field is stored as an integer field in your DataSource. But RadScheduler needs EventId type. You can have a look at the Appointment.ResourceId property which expects EventId value, not an integer. It is necessary to use a SchedulerMapping in this case and convert the integer value to EventId used by RadScheduler and convert the EventId to an integer used by your DataSource. This conversion is performed by the ConvertToDataSource and ConvertToScheduler callbacks. It is responsible for the proper conversion of the integer resource_id value coming from the DataSource to the RadScheduler's EventId. Additional information for the SchedulerMapping is available here: http://docs.telerik.com/devtools/winforms/scheduler/data-binding/scheduler-mapping

In C#, it is just necessary to specify the name of the callback which will handle the conversion but it seems to be a problem in ABL. It is required to have events.
Completed
Last Updated: 29 Dec 2020 14:23 by ADMIN
Release R1 2021
By default, each Appointment has two properties: ResourceId and ResourceIds. Usually, the ResourceId is used when you have only a single resource for the appointment. In case you have multiple resources for an appointment the ResourceIds collection is used. However, the current implementation of the EditAppointmentDialog uses a RadDropDownList for the resource selection. Thus, the user is not allowed to create an appointment and assign two resources to it. It can be achieved only programmatically. This is a common scenario when creating a meeting and you have at least two participants. A possible solution would be to replace the resources RadDropDownList with a RadCheckedDropDownList. Thus, the user will be able to select multiple resources.
Unplanned
Last Updated: 19 Jan 2018 13:27 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Feature Request
1
To reproduce:

1. Add a RadScheduler and associate a RadSchedulerNavigator to it.
2. Change the culture to  "fa-IR". When running the application you will notice that the time range in the navigator is not displayed correctly considering the culture of the associate RadScheduler.

Note: you can set the SchedulerNavigatorElement.DateFormat property to  "dd dddd". Thus, the time range should be displayed in a similar way as the header cells in RadScheduler.

Workaround: you can controls what to be displayed in the navigator by the SchedulerNavigatorElement.DateLabel.Text property.

            this.radScheduler1.Culture = new System.Globalization.CultureInfo("fa-IR");

            string start = this.radScheduler1.ActiveView.StartDate.ToString(this.radSchedulerNavigator1.SchedulerNavigatorElement.DateFormat, this.radScheduler1.Culture);
            string end = this.radScheduler1.ActiveView.EndDate.ToString(this.radSchedulerNavigator1.SchedulerNavigatorElement.DateFormat, this.radScheduler1.Culture);
            this.radSchedulerNavigator1.SchedulerNavigatorElement.DateLabel.Text = start + " - " + end;
Unplanned
Last Updated: 20 Nov 2017 15:14 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
0
This is reproducible not only with Material theme but with the other themes as well.

Workaround:

        private void radScheduler1_CellFormatting(object sender, Telerik.WinControls.UI.SchedulerCellEventArgs e)
        {
            e.CellElement.ZIndex = 0;
        }
Unplanned
Last Updated: 20 Nov 2017 16:18 by ADMIN
If you want to show the borders for the weekdays, the left most border is not shown because another element is over the cell. It is not possible to hide this top left cell and show the left border for Sunday.
Unplanned
Last Updated: 20 Nov 2017 12:57 by ADMIN
Please refer to the attached screenshot from Outlook.
Unplanned
Last Updated: 14 Aug 2017 12:00 by ADMIN
Please refer to the attached sample project and screenshot. Note that if RadScheduler is not grouped by resources, the scrollbar works as expected.
Unplanned
Last Updated: 14 Aug 2017 11:55 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
1
Please refer to the attached sample project. When you toggle the button the Visible property for the first resource is inverted. However, it doesn't take effect in RadScheduler and the resource is always visible.

Workaround: Currently, if you want to hide some of the resources, you should remove them from the Resources collection of RadScheduler. When you want to use them again, you should just add them to the same collection.
Unplanned
Last Updated: 14 Aug 2017 11:03 by ADMIN
Currently the range starts from the start date of the first appointment an ends with the end date of the last appointment within the range. One should be able to show that there are no appointments within the specified range (start from the DateStartRange).

 
Unplanned
Last Updated: 14 Aug 2017 11:54 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
1
To reproduce: Use the following code snippet:

            DateTime dt = DateTime.Now;
            this.radScheduler1.Appointments.Add(new Appointment(dt, TimeSpan.FromHours(4),"A1"));
            this.radScheduler1.Appointments.Add(new Appointment(dt, TimeSpan.FromHours(4),"A2"));

By default, when two appointments start at the same time, on the left side it is displayed the shorter appointment. Hence, if you start resizing an appointment it may jump to another location leaving the mouse in a  wrong and inconsistent position.  The attached gif illustartes the behavior.

Workaround: 

public RadForm1()
{
    InitializeComponent();

    this.radScheduler1.ElementProvider = new MyElementProvider(this.radScheduler1);

    DateTime dt = DateTime.Now;
    this.radScheduler1.Appointments.Add(new Appointment(dt, TimeSpan.FromHours(4),"A1"));
    this.radScheduler1.Appointments.Add(new Appointment(dt, TimeSpan.FromHours(4),"A2"));
}

private class AppointmentDateInfo : IComparable
{
    public AppointmentElement appointment;
    public DateTime date;
    public bool isEnd;
    private DateTimeComparer comparer;

    public AppointmentDateInfo(AppointmentElement appointment, DateTime date, bool isEnd)
    {
        this.comparer = new DateTimeComparer(appointment.Scheduler);
        this.appointment = appointment;
        this.date = date;
        this.isEnd = isEnd;
    }

    public int CompareTo(object obj)
    {
        AppointmentDateInfo other = obj as AppointmentDateInfo;
        if (other == null)
        {
            return 1;
        }

        int res = date.CompareTo(other.date);
        if (res == 0)
        {
            if (other.appointment != this.appointment)
            {
                res = other.isEnd.CompareTo(isEnd);
            }
            else
            {
                res = this.isEnd.CompareTo(other.isEnd);
            }
        }
        if (appointment.Start.Equals(other.appointment.Start))
        {
            return res != 0 ? res : appointment.AppointmentSubject.CompareTo(other.appointment.AppointmentSubject);
        }
        return res != 0 ? res : comparer.Compare(appointment, other.appointment);
    }
}

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

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

public class CustomDayViewAppointmentsTable : DayViewAppointmentsTable
{
    public CustomDayViewAppointmentsTable(RadScheduler scheduler, SchedulerView view, DayViewAppointmentsArea area) : base(scheduler, view, area)
    {
    }

    private int FindLaneSpan(AppointmentElement appointment, Dictionary<AppointmentElement, int> appointmentLanes, int maxLanes)
    {
        int lane = appointmentLanes[appointment];
        int span = maxLanes - lane;

        int cellsPerHour = this.GetDayViewBase().GetNumberOfCellsPerHour();
        int minutesPerSlot = 60 / cellsPerHour;

        DateTime roundedAppStart = this.GetRulerRoundedDateTime(appointment.Start, false);
        DateTime roundedAppEnd = this.GetRulerRoundedDateTime(appointment.End, true);

        if (appointment.Start == appointment.End)
        {
            roundedAppEnd = roundedAppEnd.AddMinutes(minutesPerSlot);
        }

        foreach (KeyValuePair<AppointmentElement, int> item in appointmentLanes)
        {
            if (appointment == item.Key)
            {
                continue;
            }

            DateTime roundedItemStart = this.GetRulerRoundedDateTime(item.Key.Start, false);
            DateTime roundedItemEnd = this.GetRulerRoundedDateTime(item.Key.End, true);

            if (item.Key.Start == item.Key.End)
            {
                roundedItemEnd = roundedItemEnd.AddMinutes(minutesPerSlot);
            }

            if (roundedItemStart < roundedAppEnd && roundedItemEnd > roundedAppStart && item.Value > lane)
            {
                span = Math.Min(span, item.Value - lane);
            }
        }

        return span;
    }

    private int FindFreeLane(List<AppointmentElement> overlappingAppointments, Dictionary<AppointmentElement, int> appointmentLanes)
    {
        List<int> indexes = new List<int>();

        for (int i = 0; i < overlappingAppointments.Count; i++)
        {
            indexes.Add(appointmentLanes[overlappingAppointments[i]]);
        }

        indexes.Sort();

        for (int i = 0; i < indexes.Count; i++)
        {
            if (i < indexes[i])
            {
                return i;
            }
        }

        return overlappingAppointments.Count;
    }
    
    protected override void ArrangeAppointments(SizeF finalSize)
    {
        RectangleF containerRect = new RectangleF(PointF.Empty, finalSize);
        List<AppointmentElement> appointmentsInLayout = new List<AppointmentElement>();

        foreach (AppointmentElement element in this.AppointmentElements)
        {
            if (element.Visibility != ElementVisibility.Collapsed)
            {
                appointmentsInLayout.Add(element);
            }
        }

        appointmentsInLayout.Sort(new DateTimeComparer(this.Scheduler));
        Dictionary<AppointmentElement, object> arrangedAppointments = new Dictionary<AppointmentElement, object>();

        foreach (AppointmentElement appointmentElement in appointmentsInLayout)
        {
            if (arrangedAppointments.ContainsKey(appointmentElement))
            {
                continue;
            }

            appointmentElement.RelatedAppointments.Sort(new DateTimeComparer(this.Scheduler));

            List<AppointmentDateInfo> appointmentDates = new List<AppointmentDateInfo>();
            List<AppointmentElement> overlappingAppointments = new List<AppointmentElement>();
            Dictionary<AppointmentElement, int> appointmentLanes = new Dictionary<AppointmentElement, int>();

            foreach (AppointmentElement relatedAppointment in appointmentElement.RelatedAppointments)
            {
                if (relatedAppointment.Visibility == ElementVisibility.Collapsed)
                {
                    continue;
                }

                DateTime appStart = relatedAppointment.Start <= relatedAppointment.End ? relatedAppointment.Start : relatedAppointment.End;
                DateTime appEnd = relatedAppointment.Start <= relatedAppointment.End ? relatedAppointment.End : relatedAppointment.Start;

                if (!this.Scheduler.EnableExactTimeRendering)
                {
                    if (appStart != appEnd)
                    {
                        appointmentDates.Add(new AppointmentDateInfo(relatedAppointment, this.GetRulerRoundedDateTime(appStart, false), false));
                        appointmentDates.Add(new AppointmentDateInfo(relatedAppointment, this.GetRulerRoundedDateTime(appEnd, true), true));
                    }
                    else
                    {
                        int cellsPerHour = this.GetDayViewBase().GetNumberOfCellsPerHour();
                        int minutesPerSlot = 60 / cellsPerHour;

                        appointmentDates.Add(new AppointmentDateInfo(relatedAppointment, this.GetRulerRoundedDateTime(appStart, false), false));
                        appointmentDates.Add(new AppointmentDateInfo(relatedAppointment, this.GetRulerRoundedDateTime(appEnd, true).AddMinutes(minutesPerSlot),
                            true));
                    }
                }
                else
                {
                    appointmentDates.Add(new AppointmentDateInfo(relatedAppointment, appStart, false));
                    appointmentDates.Add(new AppointmentDateInfo(relatedAppointment, appEnd, true));
                }
            }

            appointmentDates.Sort();
            int maxLanesCount = 0;

            for (int i = 0; i < appointmentDates.Count; i++)
            {
                if (!appointmentDates[i].isEnd)
                {
                    int freeLane = FindFreeLane(overlappingAppointments, appointmentLanes);
                    appointmentLanes.Add(appointmentDates[i].appointment, freeLane);
                    overlappingAppointments.Add(appointmentDates[i].appointment);
                    maxLanesCount = Math.Max(maxLanesCount, freeLane + 1);
                }
                else
                {
                    overlappingAppointments.Remove(appointmentDates[i].appointment);
                }

                if (overlappingAppointments.Count == 0)
                {
                    foreach (KeyValuePair<AppointmentElement, int> item in appointmentLanes)
                    {
                        AppointmentElement appointment = item.Key;
                        int lane = item.Value;
                        DateTime rulerRoundStart = this.GetRulerRoundedDateTime(appointment.Start, false);
                        DateTime rulerRoundEnd = this.GetRulerRoundedDateTime(appointment.End, true);

                        if (appointment.Start == appointment.End)
                        {
                            int cellsPerHour = this.GetDayViewBase().GetNumberOfCellsPerHour();
                            int minutesPerSlot = 60 / cellsPerHour;

                            rulerRoundEnd = rulerRoundEnd.AddMinutes(minutesPerSlot);
                        }

                        PointF location = GetItemLocationInTable(appointment.Start, finalSize);

                        float dayWidth = this.Area.DayViewElement.GetColumnWidth(this.Area.DayViewElement.GetColumnForDate(rulerRoundStart), finalSize.Width);
                        int laneSpan = FindLaneSpan(appointment, appointmentLanes, maxLanesCount);

                        SizeF size = new SizeF(dayWidth / maxLanesCount * laneSpan, this.GetItemHeight(appointment.Start, appointment.End));
                        location.X += dayWidth / maxLanesCount * lane + this.Area.DayViewElement.AppointmentMargin.Left;
                        location.Y += this.Area.DayViewElement.AppointmentMargin.Top;
                        size.Width -= this.Area.DayViewElement.AppointmentMargin.Horizontal;

                        appointment.DesiredBounds = this.OnAppointmentLayout(appointment, new RectangleF(location, size), finalSize);
                        if (!arrangedAppointments.ContainsKey(appointment))
                        {
                            arrangedAppointments.Add(appointment, null);
                        }
                    }

                    appointmentLanes.Clear();
                    maxLanesCount = 0;
                }
            }

            for (int i = 0; i < appointmentsInLayout.Count; i++)
            {
                AppointmentElement appointment = appointmentsInLayout[i];

                if (appointment.Visibility != ElementVisibility.Visible)
                    continue;

                RectangleF rectangle = appointment.DesiredBounds;

                if (this.RightToLeft)
                {
                    rectangle = LayoutUtils.RTLTranslateNonRelative(rectangle, containerRect);
                }

                appointment.Arrange(rectangle);
            }
        }
    }
}

Unplanned
Last Updated: 14 Aug 2017 11:52 by ADMIN
To reproduce: please refer to the attached sample project and run it. Try to edit the existing appointment by using the inline editor. As a result, the AppointmentAdded event will be fired. You will notice that the Appointments collection contains more appointments than the existing ones. Note that if you use the edit dialog, this event is not fired and the behavior is as expected.

Workaround: RadScheduler1.SchedulerElement.EditorManager.EditorViewMode = SchedulerEditorViewMode.EditorDialog
Completed
Last Updated: 16 Aug 2017 08:13 by ADMIN
How  to reproduce: public partial class Form2 : Form
{
    BindingList<AppointmenntObject> appointments;
    BindingSource bs;

    public Form2()
    {
        InitializeComponent();

        this.appointments = new BindingList<AppointmenntObject>();

        this.bs = new BindingSource();
        this.bs.DataSource = this.appointments;
        for (int i = 0; i <= 3; i++)
        {
            appointments.Add(new AppointmenntObject(DateTime.Now.AddDays(i), DateTime.Now.AddDays(i).AddHours(2), "Summary " + i, "Description" + i, "Location" + i));
        }

        AppointmentMappingInfo appointmentMappingInfo = new AppointmentMappingInfo();
        appointmentMappingInfo.Start = "Start";
        appointmentMappingInfo.End = "End";
        appointmentMappingInfo.Description = "Description";
        appointmentMappingInfo.Summary = "Summary";
        this.schedulerBindingDataSource1.EventProvider.Mapping = appointmentMappingInfo;
        schedulerBindingDataSource1.EventProvider.DataSource = this.bs;

        this.radScheduler1.DataSource = this.schedulerBindingDataSource1;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var ev = (AppointmenntObject)this.bs.Current;
        var end = ev.End;
        ev.End = end.AddHours(1);
    }
}

public class AppointmenntObject : INotifyPropertyChanged
    {
        private DateTime start;
        private DateTime end;
        private string summary;
        private string description;
        private string location;

        public AppointmenntObject(DateTime start, DateTime end, string summary, string description, string location)
        {
            this.Start = start;
            this.End = end;
            this.Summary = summary;
            this.Description = description;
            this.Location = location;
        }

        public DateTime Start
        {
            get
            {
                return this.start;
            }
            set
            {
                if (this.start != value)
                {
                    this.start = value;
                    OnPropertyChanged("Start");
                }
            }
        }


        public DateTime End
        {
            get
            {
                return this.end;
            }
            set
            {
                if (this.end != value)
                {
                    this.end= value;
                    OnPropertyChanged("end");
                }
            }
        }

        public string Description
        {
            get
            {
                return this.description;
            }
            set
            {
                if (this.description != value)
                {
                    this.description = value;
                    OnPropertyChanged("Description");
                }
            }
        }

        public string Summary
        {
            get
            {
                return this.summary;
            }
            set
            {
                if (this.summary != value)
                {
                    this.summary= value;
                    OnPropertyChanged("Summary");
                }
            }
        }

        public string Location
        {
            get
            {
                return this.location;
            }
            set
            {
                if (this.location != value)
                {
                    this.location = value;
                    OnPropertyChanged("Location");
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

Workaround: Rebind the SchedulerBindingDataSource object

private void button1_Click(object sender, EventArgs e)
{
    var ev = (AppointmenntObject)this.bs.Current;
    var end = ev.End;
    ev.End = end.AddHours(1);

    this.schedulerBindingDataSource1.Rebind();
}
Completed
Last Updated: 15 Feb 2018 08:26 by ADMIN
To reproduce:
RadScheduler radScheduler1 = new RadScheduler();
public Form1()
{
    InitializeComponent();
    radScheduler1.Top += 100;
    radScheduler1.Parent = this;
    this.radSchedulerNavigator1.AssociatedScheduler = radScheduler1;
    this.radScheduler1.ActiveViewType = SchedulerViewType.Timeline;
  

    Color[] colors = new Color[]{Color.LightBlue, Color.LightGreen, Color.LightYellow,
        Color.Red, Color.Orange, Color.Pink, Color.Purple, Color.Peru, Color.PowderBlue};
    string[] names = new string[]{"Alan Smith", "Anne Dodsworth",
         "Boyan Mastoni", "Richard Duncan", "Maria Shnaider"};
    for (int i = 0; i < names.Length; i++)
    {
        Resource resource = new Resource();
        resource.Id = new EventId(i);
        resource.Name = names[i];
        resource.Color = colors[i];
   this.radScheduler1.Resources.Add(resource);
    }

    this.radScheduler1.GroupType = GroupType.Resource;
    this.radScheduler1.ActiveView.ResourcesPerView = 2;
}

private void radButton1_Click(object sender, EventArgs e)
{
    SchedulerWeeklyCalendarPrintStyle weeklyCalendarStyle = new SchedulerWeeklyCalendarPrintStyle();
    weeklyCalendarStyle.AppointmentFont = new System.Drawing.Font("Segoe UI", 12, FontStyle.Regular);
    weeklyCalendarStyle.HeadingAreaHeight = 120;
    weeklyCalendarStyle.HoursColumnWidth = 30;

    this.radScheduler1.PrintStyle = weeklyCalendarStyle;

    this.radScheduler1.PrintPreview();
}

Workaround:
Change the view before printing.
Completed
Last Updated: 15 Aug 2017 11:03 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: Scheduler/Reminder
Type: Bug Report
0
To reproduce:

            Appointment a = new Appointment(DateTime.Now, TimeSpan.FromHours(20),"Meeting");
            a.StatusId = this.radScheduler1.Statuses.Last().Id;
            this.radScheduler1.Appointments.Add(a);

            this.radScheduler1.ShowAppointmentStatus = false;

The status for AppointmentElements is shown although it shouldn't.
Unplanned
Last Updated: 31 Aug 2017 08:09 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 2
Category: Scheduler/Reminder
Type: Bug Report
8
Please refer to the attached sample project. When you start the application the form's text indicates how many times the AppointmentFormatting event is fired for only 30 appointments - more than 400 times. The more appointments you have , the more times the vent is initially fired,e.g. if you have 50 appointmens it is fired If you switch between the different views you will see how the counter increases its value.
Completed
Last Updated: 20 Feb 2018 13:46 by ADMIN
Please refer to the attached gif file and sample project.

Workaround: remove the database restrictions and validate the data in the edit dialog before submitting the new appointment data.