To reproduce: Create a SQL table as per this article - http://www.telerik.com/help/winforms/scheduler-data-binding-using-datasource-property.html . Add the following mappings using EntityFramework or OpenAccess - http://www.telerik.com/help/winforms/scheduler-data-binding-using-datasource-property.html. You will notice that the resources cannot be mapped. Workaround: Implement a One-to-Many relation by adding a ResourceId column in the database and removing the old table. Resolution: Both EF and TDA mappings work. Due to the differences in the mechanisms of the two products there are some slight adjustments that need to be made. Below is how to set up the mappings with EF and in commented code for ORM. SchedulerDataEntities1 entityContext = new SchedulerDataEntities1();
RadScheduler becomes slow when adding appointments with recurrence rule that affects large time periods (year for example)
DECLINED: This is a limitation of the DataSet model. The last section "Updating the database" of this help article http://www.telerik.com/help/winforms/scheduler-data-binding-data-binding-walkthrough.html explains how you can overcome this. 1. Create a new project with RadScheduler. 2. Follow the instructions in our sample-database example help article to create a sample database. 3. Set GroupType property to Resource. 4. Add some resources 5. Run the application, try to add some appointments and to save them.
1. Create a new project with RadScheduler. 2. Add some resources. 3. Set GroupType property to Resource. 4. Handle AppointmentDropping event and print its NewResourceId property. 4. Run the project and add an appointment. 5. Try to move this appointment to another resource.
Currently RadScheduler does not support binding to DataView objects.
drop a scheduler on a form and call it schMain. replace your form1 code with the code below. it will reproduce the issue. in the load event of the form, there's a method called BindForm. if you comment out this line, it works. the resources are all in color like they should be. if you put the line back in, it breaks and they all go gray. i attached screen shots of what i see too. Comment: You should map the Color property of ResourceMappingInfo class to the respective property in your business object in order to solve this issue.
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.
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.
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); } }
To reproduce: follow the steps from the attached gif file. Workaround: public Form1() { InitializeComponent(); this.radScheduler1.RecurrenceEditDialogShowing += radScheduler1_RecurrenceEditDialogShowing; } CustomEditRecurrenceDialog dialog = null; private void radScheduler1_RecurrenceEditDialogShowing(object sender, Telerik.WinControls.UI.RecurrenceEditDialogShowingEventArgs e) { if (dialog == null) { dialog = new CustomEditRecurrenceDialog(e.Appointment); } e.RecurrenceEditDialog = dialog; } public class CustomEditRecurrenceDialog : EditRecurrenceDialog { public CustomEditRecurrenceDialog(IEvent appointment) : base(appointment) { } protected override void ApplyAppointmentDates() { DateTime end = this.appointment.End; base.ApplyAppointmentDates(); this.appointment.End = new DateTime(end.Year, end.Month, end.Day, this.timeEnd.Value.Hour, this.timeEnd.Value.Minute, this.timeEnd.Value.Second); } }
To reproduce: public RadRibbonForm1() { InitializeComponent(); this.radScheduler1.FocusedDate = new DateTime(2016, 1, 1); this.radScheduler1.ActiveViewType = Telerik.WinControls.UI.SchedulerViewType.Timeline; SchedulerTimelineView timelineView = this.radScheduler1.GetTimelineView(); timelineView.RangeStartDate = new DateTime(2016, 1, 1, 00, 00, 00); timelineView.RangeEndDate = new DateTime(2016, 12, 31, 23, 59, 59); timelineView.StartDate = new DateTime(2016, 1, 1, 00, 00, 00); Appointment appointment = new Appointment(new DateTime(2016, 1, 1, 00, 00, 00), new DateTime(2016, 1, 10, 00, 00, 00), "Quarter 1"); Appointment appointment2 = new Appointment(new DateTime(2016, 2, 1, 00, 00, 00), new DateTime(2016, 2, 10, 00, 00, 00), "Quarter 1"); Appointment appointment3 = new Appointment(new DateTime(2016, 4, 1, 00, 00, 00), new DateTime(2016, 4, 10, 00, 00, 00), "Quarter 2"); Appointment appointment4 = new Appointment(new DateTime(2016, 5, 1, 00, 00, 00), new DateTime(2016, 6, 10, 00, 00, 00), "Quarter 2"); Appointment appointment5 = new Appointment(new DateTime(2016, 7, 1, 00, 00, 00), new DateTime(2016, 7, 10, 00, 00, 00), "Quarter 3"); Appointment appointment6 = new Appointment(new DateTime(2016, 8, 1, 00, 00, 00), new DateTime(2016, 8, 10, 00, 00, 00), "Quarter 3"); Appointment appointment7 = new Appointment(new DateTime(2016, 11, 1, 00, 00, 00), new DateTime(2016, 11, 10, 00, 00, 00), "Quarter 4"); Appointment appointment8 = new Appointment(new DateTime(2016, 12, 1, 00, 00, 00), new DateTime(2016, 12, 10, 00, 00, 00), "Quarter 4"); this.radScheduler1.Appointments.Add(appointment); this.radScheduler1.Appointments.Add(appointment2); this.radScheduler1.Appointments.Add(appointment3); this.radScheduler1.Appointments.Add(appointment4); this.radScheduler1.Appointments.Add(appointment5); this.radScheduler1.Appointments.Add(appointment6); this.radScheduler1.Appointments.Add(appointment7); this.radScheduler1.Appointments.Add(appointment8); QuarterTimescale qTimeScale = new QuarterTimescale(); qTimeScale.DisplayedCellsCount = 4; timelineView.SchedulerTimescales.Add(qTimeScale); this.radScheduler1.GetTimelineView().ShowTimescale(qTimeScale); } class QuarterTimescale : MonthTimescale { public override int ScalingFactor { get { return 3; } } public override string Name { get { return "Quarter"; } } }
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.
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); } }
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.
To reproduce: 1. Add a RadScheduler on a form and set the culture: this.radScheduler1.Culture = new System.Globalization.CultureInfo("fa-IR"); 2. In regional settings set the Format to Persian(Iran) as it is illustrated in the attached screenshot. 3. Run the application and try to add an appointment. Open the Recurrence dialog and you will get the exception.
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 = 4; this.radScheduler1.ActiveViewType = SchedulerViewType.Timeline; this.radScheduler1.GetTimelineView().GroupSeparatorWidth = 0; By default, the GroupSeparatorWidth property is set to 3. If you need to remove the resources separator, it is necessary to set the GroupSeparatorWidth property to 0 which is not possible at the moment with the public API. Workaround: FieldInfo fi = typeof(SchedulerView).GetField("groupSeparatorWidth", BindingFlags.Instance | BindingFlags.NonPublic); fi.SetValue(this.radScheduler1.GetTimelineView(), 0);
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).
Run the application on a Windows 10 machine and scroll to the bottom. Please refer to the attached gif file.