Multi RadScheduler associated to one SchedulerNavigator

4 posts, 1 answers
  1. Luigi
    Luigi avatar
    3 posts
    Member since:
    Dec 2011

    Posted 15 Jul 2014 Link to this post

    HI,

    How i can associate two or many radscheduler at the same radschedulernavigator?

    I must to create a form that have 1 radschedulernavigator and 2 radscheduler where i must to show different information.

    Thanks
  2. George
    Admin
    George avatar
    500 posts

    Posted 16 Jul 2014 Link to this post

    Hello Luigi,

    Thank you for writing.

    You cannot associate more than one RadScheduler with a RadBindingNavigator at a time. You can, however put a RadDropDownList with the available schedulers. So that when a value is selected the AssociatedScheduler property of the navigator will be changed. For example here is a sample code:
    this.DropDownList = new RadDropDownList();
    this.DropDownList.Parent = this;
    this.DropDownList.Dock = DockStyle.Top;
     
    List<SchedulerWrapper> schedulers = new List<SchedulerWrapper>();
    RadScheduler scheduler1 = new RadScheduler()
    {
        Parent = this,
        Dock = DockStyle.Right
    };
     
    RadScheduler scheduler2 = new RadScheduler()
    {
        Parent = this,
        Dock = DockStyle.Left
    };
     
    schedulers.Add(new SchedulerWrapper(scheduler1));
    schedulers.Add(new SchedulerWrapper(scheduler2));
     
    this.DropDownList.DataSource = schedulers;
    this.DropDownList.DisplayMember = "Name";
    this.DropDownList.DataMember = "Scheduler";
    this.DropDownList.SelectedValueChanged += dropDownList_SelectedValueChanged;
     
    private RadSchedulerNavigator navigaror;
    void dropDownList_SelectedValueChanged(object sender, EventArgs e)
    {
        this.navigaror.AssociatedScheduler = (this.DropDownList.SelectedItem.DataBoundItem as SchedulerWrapper).Scheduler;
    }
     
    class SchedulerWrapper
    {
        public string Name
        {
            get { return this.Scheduler.Name; }
        }
     
        public RadScheduler Scheduler { get; private set; }
     
        public SchedulerWrapper(RadScheduler scheduler)
        {
            this.Scheduler = scheduler;
        }
    }

    The SchedulerWrapper class is needed since you can bind only to properties which are declared in the bound type.

    I hope this helps.

    Regards,
    George
    Telerik
     
    Check out Telerik Analytics, the service which allows developers to discover app usage patterns, analyze user data, log exceptions, solve problems and profile application performance at run time. Watch the videos and start improving your app based on facts, not hunches.
     
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Luigi
    Luigi avatar
    3 posts
    Member since:
    Dec 2011

    Posted 23 Apr 2015 in reply to George Link to this post

    Hello George

    Now I have the same necessity, but i must not insert a dropdownlist
    How I can do?
    With one Navigator i must do automatic change 2 schedulers
    In attach find a screenshot of my form.
    Thanks

  5. Answer
    Dess
    Admin
    Dess avatar
    1609 posts

    Posted 28 Apr 2015 Link to this post

    Hello Luigi,

    Thank you for writing.

    RadSchedulerNavigator can be associated to only one RadScheduler at a time. However, you can subscribe to all events introduced by the navigator and affect the second scheduler as well. Here is a sample code snippet demonstrating how to handle most of the events and affect the second scheduler:
    public Form1()
    {
        InitializeComponent();
     
        this.radSchedulerNavigator1.AssociatedScheduler = this.radScheduler1;
        this.radSchedulerNavigator1.DayViewClick += radSchedulerNavigator1_DayViewClick;
        this.radSchedulerNavigator1.WeekViewClick += radSchedulerNavigator1_WeekViewClick;
        this.radSchedulerNavigator1.MonthViewClick += radSchedulerNavigator1_MonthViewClick;
        this.radSchedulerNavigator1.TimelineViewClick += radSchedulerNavigator1_TimelineViewClick;
        this.radSchedulerNavigator1.ShowWeekendStateChanged += radSchedulerNavigator1_ShowWeekendStateChanged;
        this.radSchedulerNavigator1.NavigateBackwardsClick += radSchedulerNavigator1_NavigateBackwardsClick;
        this.radSchedulerNavigator1.NavigateForwardsClick += radSchedulerNavigator1_NavigateForwardsClick;
    }
     
    private void radSchedulerNavigator1_NavigateForwardsClick(object sender, EventArgs e)
    {
        int navigationStep = this.radSchedulerNavigator1.SchedulerNavigatorElement.NavigationStep;
        NavigationStepTypes navigationStepType = this.radSchedulerNavigator1.SchedulerNavigatorElement.NavigationStepType;
         
        switch (this.radScheduler2.ActiveViewType)
        {
            case SchedulerViewType.Day:
            case SchedulerViewType.MultiDay:
                navigationStep = 1;
                navigationStepType = NavigationStepTypes.Day;
                break;
            case SchedulerViewType.Timeline:
                navigationStep = 1;
                navigationStepType = StepsByScalling(this.radScheduler2.GetTimelineView().GetScaling().Timescale, ref navigationStep);
                break;
            case SchedulerViewType.Week:
            case SchedulerViewType.WorkWeek:
                navigationStep = 1;
                navigationStepType = NavigationStepTypes.Week;
                break;
            case SchedulerViewType.Month:
                navigationStep = 1;
                if (!this.radScheduler2.GetMonthView().ShowWeekend)
                {
                    navigationStep += 2;
                }
                DateTime endDate = this.radScheduler2.ActiveView.EndDate.AddDays(navigationStep);
                DateTime dtStart = this.radScheduler2.ActiveView.StartDate;
                DateTime dtStartMonth = new DateTime(endDate.Year, endDate.Month, 1);
                navigationStep = dtStartMonth.Subtract(dtStart).Days;
                navigationStepType = NavigationStepTypes.Day;
                this.radScheduler2.GetMonthView().WeekCount = DateHelper.GetMonthDisplayWeeks(dtStartMonth, this.radScheduler2.Culture.DateTimeFormat);
                break;
        }
     
        RadScheduler.NavigateToNextViewCommand.ExecuteCommand(this.radScheduler2, navigationStepType, navigationStep);
    }
     
    private void radSchedulerNavigator1_NavigateBackwardsClick(object sender, EventArgs e)
    {
        int navigationStep = this.radSchedulerNavigator1.SchedulerNavigatorElement.NavigationStep;
        NavigationStepTypes navigationStepType = this.radSchedulerNavigator1.SchedulerNavigatorElement.NavigationStepType;
     
        switch (this.radScheduler2.ActiveViewType)
        {
            case SchedulerViewType.Day:
                navigationStep = 1;
                navigationStepType = NavigationStepTypes.Day;
                break;
            case SchedulerViewType.Timeline:
                navigationStep = 1;
                navigationStepType = StepsByScalling(this.radScheduler2.GetTimelineView().GetScaling().Timescale, ref navigationStep);
                break;
            case SchedulerViewType.Week:
            case SchedulerViewType.WorkWeek:
                navigationStep = 1;
                navigationStepType = NavigationStepTypes.Week;
                break;
            case SchedulerViewType.Month:
                navigationStep = 1;
                if (!this.radScheduler2.GetMonthView().ShowWeekend)
                {
                    navigationStep += 2;
                }
                DateTime dtStart = this.radScheduler2.ActiveView.StartDate.AddDays(-navigationStep);
                DateTime dtStartMonth = new DateTime(dtStart.Year, dtStart.Month, 1);
                navigationStep = this.radScheduler2.ActiveView.StartDate.Subtract(dtStartMonth).Days;
                navigationStepType = NavigationStepTypes.Day;
                this.radScheduler2.GetMonthView().WeekCount = DateHelper.GetMonthDisplayWeeks(dtStartMonth, CultureInfo.CurrentCulture.DateTimeFormat);
                break;
        }
     
        RadScheduler.NavigateToPreviousViewCommand.ExecuteCommand(this.radScheduler2, navigationStepType, navigationStep);
    }
     
    private NavigationStepTypes StepsByScalling(Timescales timescale, ref int navigationStep)
    {
        NavigationStepTypes navigationStepType = NavigationStepTypes.Day;
        switch (timescale)
        {
            case Timescales.Minutes:
                navigationStepType = NavigationStepTypes.Minute;
                navigationStep = 15;
                break;
            case Timescales.HalfHour:
                navigationStepType = NavigationStepTypes.Minute;
                navigationStep = 30;
                break;
            case Timescales.Hours:
                navigationStepType = NavigationStepTypes.Hour;
                break;
            case Timescales.Days:
                navigationStepType = NavigationStepTypes.Day;
                break;
            case Timescales.Weeks:
                navigationStepType = NavigationStepTypes.Week;
                break;
            case Timescales.Months:
                navigationStepType = NavigationStepTypes.Month;
                break;
            case Timescales.Years:
                navigationStepType = NavigationStepTypes.Year;
                break;
        }
     
        return navigationStepType;
    }
     
    private void radSchedulerNavigator1_ShowWeekendStateChanged(object sender, Telerik.WinControls.UI.StateChangedEventArgs args)
    {
        if (this.radScheduler2.ActiveView is SchedulerWeekView)
        {
            (this.radScheduler2.ActiveView as SchedulerWeekView).ShowWeekend =
                                                                              this.radSchedulerNavigator1.ShowWeekendCheckBox.ToggleState == ToggleState.On;
        }
        else if (this.radScheduler2.ActiveView is SchedulerMonthView)
        {
            (this.radScheduler2.ActiveView as SchedulerMonthView).ShowWeekend =
                                                                               this.radSchedulerNavigator1.ShowWeekendCheckBox.ToggleState == ToggleState.On;
        }
    }
     
    private void radSchedulerNavigator1_TimelineViewClick(object sender, EventArgs e)
    {
        this.radScheduler2.ActiveViewType = Telerik.WinControls.UI.SchedulerViewType.Timeline;
    }
     
    private void radSchedulerNavigator1_MonthViewClick(object sender, EventArgs e)
    {
        this.radScheduler2.ActiveViewType = Telerik.WinControls.UI.SchedulerViewType.Month;
    }
     
    private void radSchedulerNavigator1_WeekViewClick(object sender, EventArgs e)
    {
        this.radScheduler2.ActiveViewType = Telerik.WinControls.UI.SchedulerViewType.Week;
    }
     
    private void radSchedulerNavigator1_DayViewClick(object sender, EventArgs e)
    {
        this.radScheduler2.ActiveViewType = Telerik.WinControls.UI.SchedulerViewType.Day;
    }

    I hope this information helps. Should you have further questions, I would be glad to help.
     
    Regards,
    Dess
    Telerik
     

    See What's Next in App Development. Register for TelerikNEXT.

     
Back to Top