Completed
Last Updated: 17 Mar 2025 08:04 by ADMIN
Release 2025 Q2 (May)
Created by: Durga
Comments: 3
Category: Scheduler
Type: Feature Request
35

I have a requirement to design our own custom add/edit template form for scheduler control.

I looked at  custom edit form example and found very helpful, However this example does not demonstrate how to use RecurrenceEditor and use them in custom template.

Unplanned
Last Updated: 26 Feb 2025 18:12 by Scott
Created by: Benjamin
Comments: 8
Category: Scheduler
Type: Feature Request
6

Hi there

The scheduler is an amazing component for Blazor, however with our designs we'd need to hijack one of the existing views and make a custom page from that which we don't really want to do if we can get this feature.

Custom Views would work just like any other view, but expose a <ViewTemplate> tag that would allow us to create our own custom view that can leverage on the power of the scheduler without doing anything hacky to achieve the same effect.

For instance a code example can be like:

<SchedulerViews>
    <SchedulerMonthView />
    <SchedulerDayView StartTime="@CurrentDate"></SchedulerDayView>
    <SchedulerCustomView>
        <ViewTemplate Context="view">
            <h1>This is a custom view for the @view.month</h1>
            <TelerikCalendar Date="@item.date" />
        </ViewTemplate>
    </SchedulerCustomView>
</SchedulerViews>

Planned
Last Updated: 26 Feb 2025 12:20 by ADMIN
Scheduled for 2025 Q2 (May)

Support the recurrence rule to create multiple appointments per time slot. Examples of such rules are:

FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR,SA,SU;BYHOUR=08,09,10,11,12,13,14,15,16;BYMINUTE=50

FREQ=MINUTELY;BYMINUTE=1,16,31,46.
Unplanned
Last Updated: 21 Jan 2025 15:51 by Rob
Created by: Shannon
Comments: 6
Category: Scheduler
Type: Feature Request
4

I want to easily print the Scheduler calendar - month view, week view and more.

===

ADMIN EDIT

===

A possible approach for the time being is to implement printing functionality for the Scheduler in a similar fashion to how the Grid is printed here https://github.com/telerik/blazor-ui/tree/master/grid/print.

The approach relies on using JavaScript to invoke the browser print() method. Using CSS and @media print, you can customize the page and specify which elements should be visible when printing. For example, you may hide the toolbar and footer of the component, so only the calendar is visible.

Here is a runnable sample that demonstrates the approach: https://blazorrepl.telerik.com/wfkbbBca54BdZnUk24

Unplanned
Last Updated: 21 Jan 2025 08:53 by Hernando

Now that we can have more than 2 events in a day in Month View, we need to add an AppointmentHeight parameter to be able to make the appointments taller in height to accommodate longer titles.

 

ADMIN EDIT

An alternative for the time being is to show the longer content by using the appointment templates and the Tooltip component. For example:

https://github.com/telerik/blazor-ui/tree/master/scheduler/appointment-tooltips

Unplanned
Last Updated: 09 Jan 2025 12:33 by ADMIN
How can I implement auto-scrolling in the Telerik Scheduler when dragging an appointment outside the visible viewport? I want the scheduler to automatically scroll in the appropriate direction to bring the dragged appointment into view.
Need More Info
Last Updated: 24 Dec 2024 13:57 by ADMIN
Created by: Nenad
Comments: 5
Category: Scheduler
Type: Feature Request
1
When adding an appointment enable option for reminder popup. Same as options for recurrence, you can set up reminder options (remind me x time before). You can add additional options like snooze or to disable reminder, but this is the main one, and default can be 15 minutes before event.
Unplanned
Last Updated: 17 Dec 2024 13:42 by Marcus
Created by: n/a
Comments: 1
Category: Scheduler
Type: Feature Request
8
Add State feature so it will be possible to control add/insert/update operations in the Scheduler.
Unplanned
Last Updated: 13 Dec 2024 13:00 by ADMIN

At the moment start and end times effectively "round" to the nearest half an hour.   This can give the impression of events overlapping when they do not

e.g.

Admin edit: This feature would be similar to the Exact Time Rendering in our WebForms suite: https://demos.telerik.com/aspnet-ajax/scheduler/examples/exacttimerendering/defaultcs.aspx

Completed
Last Updated: 11 Dec 2024 14:42 by ADMIN
Release 2025 Q1 (Feb)
Created by: Thomas Schicker
Comments: 4
Category: Scheduler
Type: Feature Request
10

If the Scheduler is placed in a parent container (for example Telerik Splitter or any other container) its appointments are not resized when resizing the pane. The Scheduler itself resizes accordingly, but the appointments don't.

If the Scheduler is used as a standalone component, the appointments are properly resized and repositionеd on browser resize.
Unplanned
Last Updated: 09 Dec 2024 10:07 by Federico
Created by: Federico
Comments: 0
Category: Scheduler
Type: Feature Request
2
The TimeColumn of the Agenda view displays the time in a 12-hour format by default. I want to be able to specify 24-hour format for the time.
Completed
Last Updated: 26 Nov 2024 06:26 by ADMIN
Release 7.0.0
Created by: Sherrie
Comments: 2
Category: Scheduler
Type: Feature Request
13

Is there a way to customize the resource grouping's header (i.e. Alex, Bob, Charlie)? I understand it displays the text from the Resource, but I would like to be able to customize the HTML displayed so that I can add a tooltip. Would you have a suggestion as to how I can accomplish this?

Kendo Group Header Template

Completed
Last Updated: 14 Nov 2024 09:28 by ADMIN
Release 7.0.0
Created by: Greg
Comments: 7
Category: Scheduler
Type: Feature Request
15

Other schedule controls have an 'agenda' view that has a chronological list of appointments back to back stacked vertically colored by resource.

It would be great for the telerik scheduler to have a view like this.

 

Completed
Last Updated: 14 Nov 2024 09:27 by ADMIN
Release 7.0.0
Created by: Neil
Comments: 6
Category: Scheduler
Type: Feature Request
18

I want to hide the 'All Day slot'  - I don't want to offer this functionality.

At the moment, you could try CSS like this, but ideally this would be a parameter (maybe on the view):

 

        .no-allday .k-scheduler-head .k-scheduler-group:last-child{
            display:none;
        }

    <div class="no-allday">
        <TelerikScheduler Data="@Appointments" @bind-Date="@StartDate" @bind-View="@CurrView" Height="600px" Width="800px">
            <SchedulerViews>
                <SchedulerDayView StartTime="@DayStart" />
                <SchedulerWeekView StartTime="@DayStart" />
                <SchedulerMultiDayView StartTime="@DayStart" NumberOfDays="10" />
            </SchedulerViews>
        </TelerikScheduler>
    </div>

Completed
Last Updated: 14 Nov 2024 09:26 by ADMIN
Release 7.0.0
Created by: Sherrie
Comments: 0
Category: Scheduler
Type: Feature Request
24
Please add support for Toolbar Template, so I can control what is rendered in the Scheduler Toolbar.
Unplanned
Last Updated: 24 Oct 2024 12:32 by ADMIN

I'm in the same situation as the OP in this post: https://www.telerik.com/forums/how-do-you-always-edit-series-when-editing-a-recurring-appointment


In my case, I'm working with with the Blazor Scheduler Component. How can I disable the prompt and automatically select "Edit the series"? Or at least "disable" the "Edit this occurrence" button when updating/deleting an appointment? 

---

ADMIN EDIT

Note: You may also check the Differentiate "edit current occurrence" and "edit the series" in the RecurrenceDialog feature request as the implementation of both features will most likely be covered in one release.

Please comment with suggestions on how you would like to see this feature exposed. Ideally it might have to be dynamic so you can toggle it based on conditions, so perhaps it could be a parameter (not flexible), an event argument to OnEdit, or a separate event/setting.

Here is a sample code you can try to achieve this - comments in the code explain how the templates are used to capture the edit action and some JS is used to fake-click the button to simulate a user choice:

 

@inject IJSRuntime _jsInterop
@* this errors suppression is a hack to make this sample succinct
    move this script to a proper place for a real app*@
<script suppress-error="BL9992">
    function clickSchedulerPromptButton(btnIndex) {
        setTimeout(function () {
            var buttons = document.querySelectorAll(".k-window-content .text-right button");
            if (buttons && buttons.length >= btnIndex) {
                var chosenButton = buttons[btnIndex];
                chosenButton.click();
            }
        }, 50);
    }
</script>

@* appearance setting for the template - make the custom template tall as the appointment to capture all clicks *@
<style>
    .tallAppt {
        height: 100%;
    }
</style>

<TelerikScheduler Data="@Appointments"
                  OnUpdate="@UpdateAppointment"
                  OnCreate="@AddAppointment"
                  OnDelete="@DeleteAppointment"
                  AllowCreate="true" AllowDelete="true" AllowUpdate="true"
                  @bind-Date="@StartDate" Height="600px" @bind-View="@CurrView">
    <ItemTemplate>
        @{
            SchedulerAppointment appt = context as SchedulerAppointment;
        }
        <div title="@appt.Start - @appt.End" class="tallAppt" @ondblclick="@( () => ChooseEditMode(appt) )"><div class="k-event-template">@appt.Title</div></div>
    </ItemTemplate>
    <AllDayItemTemplate>
        @{
            SchedulerAppointment appt = context as SchedulerAppointment;
        }
        <div title="@appt.Start.ToShortDateString() - @appt.Title" class="tallAppt" @ondblclick="@( () => ChooseEditMode(appt) )"><div class="k-event-template">@appt.Title</div></div>
    </AllDayItemTemplate>
    <SchedulerViews>
        <SchedulerDayView StartTime="@DayStart" />
        <SchedulerWeekView StartTime="@DayStart" />
        <SchedulerMultiDayView StartTime="@DayStart" NumberOfDays="10" />
    </SchedulerViews>
</TelerikScheduler>

@code {
    //async void so we don't block the execution
    //we will have a small timeout in the script to let it wait for the popup
    async void ChooseEditMode(SchedulerAppointment appt)
    {
        // check if we have a recurring appointment or a member of one
        if (appt.RecurrenceId != null || !string.IsNullOrEmpty(appt.RecurrenceRule))
        {
            int btnIndexToClick = 0;//the first button - edit instance
                                    // make it 1 for the second button - the series

            await _jsInterop.InvokeVoidAsync("clickSchedulerPromptButton", btnIndexToClick);
        }

    }

    //the rest is sample data and sample CUD operations handling



    // sample data and scheduler settings
    public SchedulerView CurrView { get; set; } = SchedulerView.Week;
    public DateTime StartDate { get; set; } = new DateTime(2019, 12, 2);
    public DateTime DayStart { get; set; } = new DateTime(2000, 1, 1, 8, 0, 0); //the time portion is important

    List<SchedulerAppointment> Appointments { get; set; }

    async Task UpdateAppointment(SchedulerUpdateEventArgs args)
    {
        SchedulerAppointment item = (SchedulerAppointment)args.Item;

        await MyService.Update(item);
        await GetSchedulerData();
    }

    async Task AddAppointment(SchedulerCreateEventArgs args)
    {
        SchedulerAppointment item = args.Item as SchedulerAppointment;

        await MyService.Create(item);
        await GetSchedulerData();
    }

    async Task DeleteAppointment(SchedulerDeleteEventArgs args)
    {
        SchedulerAppointment item = (SchedulerAppointment)args.Item;

        await MyService.Delete(item);
        await GetSchedulerData();
    }






    public class SchedulerAppointment
    {
        public Guid Id { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public DateTime Start { get; set; }
        public DateTime End { get; set; }
        public bool IsAllDay { get; set; }
        public string RecurrenceRule { get; set; }
        public List<DateTime> RecurrenceExceptions { get; set; }
        public Guid? RecurrenceId { get; set; }

        public SchedulerAppointment()
        {
            Id = Guid.NewGuid();
        }
    }

    async Task GetSchedulerData()
    {
        Appointments = await MyService.Read();
    }

    protected override async Task OnInitializedAsync()
    {
        await GetSchedulerData();
    }

    // the following static class mimics an actual data service that handles the actual data source
    // replace it with your actual service through the DI, this only mimics how the API can look like and works for this standalone page
    public static class MyService
    {
        private static List<SchedulerAppointment> _data { get; set; } = new List<SchedulerAppointment>()
{
            new SchedulerAppointment
            {
                Title = "Board meeting",
                Description = "Q4 is coming to a close, review the details.",
                Start = new DateTime(2019, 12, 5, 10, 00, 0),
                End = new DateTime(2019, 12, 5, 11, 30, 0)
            },

            new SchedulerAppointment
            {
                Title = "Vet visit",
                Description = "The cat needs vaccinations and her teeth checked.",
                Start = new DateTime(2019, 12, 2, 11, 30, 0),
                End = new DateTime(2019, 12, 2, 12, 0, 0)
            },

            new SchedulerAppointment
            {
                Title = "Planning meeting",
                Description = "Kick off the new project.",
                Start = new DateTime(2019, 12, 6, 9, 30, 0),
                End = new DateTime(2019, 12, 6, 12, 45, 0)
            },

            new SchedulerAppointment
            {
                Title = "Trip to Hawaii",
                Description = "An unforgettable holiday!",
                IsAllDay = true,
                Start = new DateTime(2019, 11, 27),
                End = new DateTime(2019, 12, 05)
            },

            new SchedulerAppointment
            {
                Title = "Morning run",
                Description = "Some time to clear the head and exercise.",
                Start = new DateTime(2019, 11, 27, 9, 0, 0),
                End = new DateTime(2019, 11, 27, 9, 30, 0),
                RecurrenceRule = "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR"
            }
        };

        public static async Task Create(SchedulerAppointment itemToInsert)
        {
            itemToInsert.Id = Guid.NewGuid();
            _data.Insert(0, itemToInsert);
        }

        public static async Task<List<SchedulerAppointment>> Read()
        {
            return await Task.FromResult(_data);
        }

        public static async Task Update(SchedulerAppointment itemToUpdate)
        {
            var index = _data.FindIndex(i => i.Id == itemToUpdate.Id);
            if (index != -1)
            {
                _data[index] = itemToUpdate;
            }
        }

        public static async Task Delete(SchedulerAppointment itemToDelete)
        {
            if (itemToDelete.RecurrenceId != null)
            {
                // a recurrence exception was deleted, you may want to update
                // the rest of the data source - find an item where theItem.Id == itemToDelete.RecurrenceId
                // and remove the current exception date from the list of its RecurrenceExceptions
            }

            if (!string.IsNullOrEmpty(itemToDelete.RecurrenceRule) && itemToDelete.RecurrenceExceptions?.Count > 0)
            {
                // a recurring appointment was deleted that had exceptions, you may want to
                // delete or update any exceptions from the data source - look for
                // items where theItem.RecurrenceId == itemToDelete.Id
            }

            _data.Remove(itemToDelete);
        }
    }
}

 

---

Unplanned
Last Updated: 18 Sep 2024 11:53 by Mike
Created by: Mike
Comments: 0
Category: Scheduler
Type: Feature Request
1
I am using resource grouping with Day view only. I have 5 groups and showing the date for each column/group is repetitive, and a waste of screen space. I want to remove the date header as I am already displaying the date in a different element on the page.
Unplanned
Last Updated: 21 Aug 2024 13:58 by Leonard
The current functionality allows dragging items from an external component to the Scheduler, but not the other way around. I would like to be able to drag and drop appointments between multiple Schedulers.
Unplanned
Last Updated: 26 Jul 2024 13:35 by ADMIN
Created by: Janick
Comments: 4
Category: Scheduler
Type: Feature Request
1
When the Scheduler works with a large dataset the rendering can get laggy. I need to use a rendering optimization feature such as the virtual scrolling in the Grid. 
Unplanned
Last Updated: 26 Jul 2024 13:34 by Janick
Created by: Janick
Comments: 0
Category: Scheduler
Type: Feature Request
1

I'd like to have a data virtualization feature (similar to the OnRead event), so I can load only small chunks of data (appointments) specifically for the current page/view.

===

ADMIN EDIT

===

Currently, you can achieve similar functionality by handling the DateChanged and ViewChanged events of the Scheduler to load only the relevant appointments for the selected period.

You can find an example here: Load Scheduler Appointments on Demand.

1 2 3 4 5