Unplanned
Last Updated: 12 Nov 2025 15:37 by IT
In our serverside blazor application we use the Telerik's DateTimePicker. When we type values in to the date time picker control, it jumps to the next section or to the end before completing the currect section. We use the format 'yyyy-MM-dd HH:mm'

It does not happen always and I think it is happenning when the internet connection is slow and it shows a Javascript error as well (screenshots below)
Unplanned
Last Updated: 12 Nov 2025 13:13 by ADMIN
Created by: Taarti
Comments: 4
Category: Grid
Type: Bug Report
28

In the case of a sorted column, NVDA is not narrating the correct column name and narrating the incorrect Roles for the column headers.

In the case of an unsorted column, NVDA is narrating the column name twice and repeating the information.

Unplanned
Last Updated: 11 Nov 2025 17:57 by David
The parameter is available for TelerikNumericTextBox only but it would be helpful for text-inputs as well.
Unplanned
Last Updated: 11 Nov 2025 13:15 by ADMIN
Created by: Harry
Comments: 0
Category: Chat
Type: Feature Request
1
It would be good to be able to either use emoji's in the chat component via a button similar to the attachments, or add the capability for custom tooling to be added to that area.
Unplanned
Last Updated: 11 Nov 2025 11:03 by ADMIN
Created by: Kinga
Comments: 3
Category: UI for Blazor
Type: Feature Request
20

Hi,

is it possible to add control of vertical timeline like this (https://antblazor.com/en-US/components/timeline) with extra features like:

  • adding new items with button on top
  • inline edit
  • item selection
  • item actions

I also attached image of what i build based on control from link above, I would like to implement something similar with Telerik.

Maybe you can recommend some other controls to replace it with?

Thank you :)

Unplanned
Last Updated: 10 Nov 2025 10:33 by ADMIN
The IsEntityFrameworkProvider method in the DataSource package returns false when the provider is Entity Framework Core. 
Unplanned
Last Updated: 07 Nov 2025 14:02 by ADMIN
Created by: CHING CHENG
Comments: 1
Category: Spreadsheet
Type: Bug Report
1

'SLOPE' and 'LINEST' Formulas do not work ?

 

Unplanned
Last Updated: 07 Nov 2025 07:25 by Justin
Created by: Justin
Comments: 0
Category: Upload
Type: Feature Request
1

Please expose the modified date of the selected and uploaded files, similar to the standard Blazor <InputFile> component.

This request applies to both the FileSelect and the Upload components.

Unplanned
Last Updated: 06 Nov 2025 13:58 by Daniel

The appointments at the start of the day seem accurate. If you scroll down, the position of the appointments does not line up with the grid line for the hour that it starts at or ends at. The issue can be observed in the live demo.

 

Unplanned
Last Updated: 05 Nov 2025 09:20 by Victoria

The FileManager TreeView does not expand automatically in some scenarios, which can cause the TreeView and ListView UI to be inconsistent:

  • Programmatic Path change.
  • When clicking on a folder in the TreeView.
  • When navigating to a folder from the ListView, while its parent is not already expanded.

Here is a test page and steps to reproduce.

Test 1

  1. Copy `/folder-16/folder-17` in the textbox and hit Enter.
  2. The FileManager navigates to the specified folder and the TreeView selects it, but does not expand.

Test 2

  1. Click on `folder-16` in the TreeView.
  2. The TreeView does not expand, but it should.
  3. Double-click `folder-17` in the ListView.
  4. The FileManager navigates and the TreeView selects the new folder, but does not expand.

<p>/folder-16/folder-17</p>

<TelerikTextBox @bind-Value="@DirectoryPath" Width="max-content" OnChange="@(() => FileManagerRef!.Rebind())" />

<TelerikFileManager @ref="@FileManagerRef"
                    Data="@FileManagerData"
                    @bind-Path="@DirectoryPath"
                    View="@FileManagerViewType.ListView"
                    EnableLoaderContainer="false"
                    OnDownload="@OnDownloadHandler"
                    NameField="@(nameof(FlatFileEntry.Name))"
                    SizeField="@(nameof(FlatFileEntry.Size))"
                    PathField="@(nameof(FlatFileEntry.Path))"
                    ExtensionField="@(nameof(FlatFileEntry.Extension))"
                    IsDirectoryField="@(nameof(FlatFileEntry.IsDirectory))"
                    HasDirectoriesField="@(nameof(FlatFileEntry.HasDirectories))"
                    IdField="@(nameof(FlatFileEntry.Id))"
                    ParentIdField="@(nameof(FlatFileEntry.ParentId))"
                    DateCreatedField="@(nameof(FlatFileEntry.DateCreated))"
                    DateCreatedUtcField="@(nameof(FlatFileEntry.DateCreatedUtc))"
                    DateModifiedField="@(nameof(FlatFileEntry.DateModified))"
                    DateModifiedUtcField="@(nameof(FlatFileEntry.DateModifiedUtc))"
                    Class="my-filemanager">
</TelerikFileManager>

@code {
    private TelerikFileManager<FlatFileEntry>? FileManagerRef { get; set; }

    private List<FlatFileEntry>? FileManagerData { get; set; }

    public string? DirectoryPath { get; set; } = string.Empty;

    private readonly string RootPath = string.Empty;

    public async Task<bool> OnDownloadHandler(FileManagerDownloadEventArgs args)
    {
        await Task.Delay(1);

        return true;
    }

    private int FolderLevelCount { get; set; } = 5;
    private int FilesInFolderCount { get; set; } = 5;
    private int FoldersInFolderCount { get; set; } = 2;
    private int FolderNameCounter { get; set; }
    private readonly List<string> FileExtensions = new() {
            ".txt", ".pdf", ".docx", ".xlsx", ".png", ".jpg", ".gif", ".zip", ".css", ".html", ".mp3", ".mpg"
        };

    protected override async Task OnInitializedAsync()
    {
        await Task.CompletedTask;

        DirectoryPath = RootPath;

        FileManagerData = LoadFlatDataAsync();

        await base.OnInitializedAsync();
    }

    private List<FlatFileEntry> LoadFlatDataAsync()
    {
        List<FlatFileEntry> data = new List<FlatFileEntry>();

        string rootDataPath = string.IsNullOrEmpty(RootPath) ? "/" : RootPath;

        PopulateChildren(data, null, rootDataPath, 1);

        return data;
    }

    private void PopulateChildren(List<FlatFileEntry> data, string? parentId, string parentPath, int level)
    {
        var rnd = Random.Shared;

        for (int i = 1; i <= FilesInFolderCount; i++)
        {
            string itemId = Guid.NewGuid().ToString();
            string itemExtension = FileExtensions[rnd.Next(0, FileExtensions.Count)];
            string itemName = $"{itemExtension.Substring(1)}-file-{(FolderNameCounter != default ? string.Concat(FolderNameCounter, "-") : string.Empty)}{i}";
            string itemPath = Path.Combine(parentPath, string.Concat(itemName, itemExtension));

            data.Add(new FlatFileEntry()
            {
                Id = itemId,
                ParentId = parentId,
                Name = itemName,
                IsDirectory = false,
                HasDirectories = false,
                DateCreated = DateTime.Now,
                DateCreatedUtc = DateTime.Now.ToUniversalTime(),
                DateModified = DateTime.Now,
                DateModifiedUtc = DateTime.Now.ToUniversalTime(),
                Path = itemPath,
                Extension = itemExtension,
                Size = rnd.Next(1_000, 3_000_000)
            });
        }

        if (level < FolderLevelCount)
        {
            for (int i = 1; i <= FoldersInFolderCount; i++)
            {
                var itemId = Guid.NewGuid().ToString();
                var itemName = $"folder-{++FolderNameCounter}";
                var itemPath = Path.Combine(parentPath, itemName);

                data.Add(new FlatFileEntry()
                {
                    Id = itemId,
                    ParentId = parentId,
                    Name = itemName,
                    IsDirectory = true,
                    HasDirectories = level < FolderLevelCount - 1,
                    DateCreated = DateTime.Now,
                    DateCreatedUtc = DateTime.Now.ToUniversalTime(),
                    DateModified = DateTime.Now,
                    DateModifiedUtc = DateTime.Now.ToUniversalTime(),
                    Path = itemPath,
                    Size = rnd.Next(100_000, 10_000_000)
                });

                PopulateChildren(data, itemId, itemPath, level + 1);
            }
        }
    }

    public class FlatFileEntry : FileEntry
    {
        public string Id { get; set; } = Guid.NewGuid().ToString();

        public string ParentId { get; set; }
    }

    public class FileEntry
    {
        public string Name { get; set; }

        public long Size { get; set; }

        public string Path { get; set; }

        public string Extension { get; set; }

        public bool IsDirectory { get; set; }

        public bool HasDirectories { get; set; }

        public DateTime DateCreated { get; set; }

        public DateTime DateCreatedUtc { get; set; }

        public DateTime DateModified { get; set; }

        public DateTime DateModifiedUtc { get; set; }
    }
}

Unplanned
Last Updated: 05 Nov 2025 08:59 by ADMIN
Created by: Christian
Comments: 9
Category: Grid
Type: Feature Request
10
I would like to use Virtual Scrolling and Hierarchy for the Grid. 
Unplanned
Last Updated: 03 Nov 2025 08:45 by Jorge
Created by: Jorge
Comments: 0
Category: Grid
Type: Feature Request
1

Please add support for programmatic exporting of Grids (SaveAsExcelFileAsync() and ExportToExcelAsync() ) with a GridExcelExportOptions argument and multi-column headers.

===

A potential workaround is to programmatically click the built-in export command button, which can even be hidden:

@using Telerik.Blazor.Components.Grid

@inject IJSRuntime JS

<PageTitle>Home</PageTitle>

<TelerikGrid Data="@GridData">
    <GridToolBarTemplate>
        <TelerikButton OnClick="@ExportGridWithOtherColumns">Export Programmatically</TelerikButton>
        <GridCommandButton Class="hidden-export-button" Command="ExcelExport">Export Natively</GridCommandButton>
    </GridToolBarTemplate>
    <GridSettings>
        <GridExcelExport OnBeforeExport="@OnGridBeforeExport" />
    </GridSettings>
    <GridColumns>
        <GridColumn Field="@nameof(Product.Id)" Width="100px" />
        <GridColumn Field="@nameof(Product.Name)" Width="120px" />
        <GridColumn Title="Product Details">
            <Columns>
                <GridColumn Field="@nameof(Product.Group)" Width="180px" />
                <GridColumn Field="@nameof(Product.Price)" DisplayFormat="{0:c2}" Width="120px" />
                <GridColumn Field="@nameof(Product.Quantity)" DisplayFormat="{0:n0}" Width="120px" />
                <GridColumn Field="@nameof(Product.Released)" DisplayFormat="{0:d}" Width="180px" />
                <GridColumn Field="@nameof(Product.Discontinued)" Width="100px" />
            </Columns>
        </GridColumn>
    </GridColumns>
</TelerikGrid>

<style>
    .hidden-export-button {
        display: none;
    }
</style>

<script suppress-error="BL9992">
    function clickExportCommandButton() {
        let hiddenExportButton = document.querySelector(".hidden-export-button");
        if (hiddenExportButton) {
            hiddenExportButton.click();
        }
    }
</script>

@code {
    private List<Product> GridData { get; set; } = new();

    private void OnGridBeforeExport(GridBeforeExcelExportEventArgs args)
    {
        List<string> exportableColumnFields = new List<string> { nameof(Product.Name), nameof(Product.Price), nameof(Product.Quantity) };
        List<GridExcelExportColumn> ColumnsToExport = new();

        foreach (GridExcelExportColumn column in args.Columns)
        {
            if (exportableColumnFields.Contains(column.Field))
            {
                ColumnsToExport.Add(column);
            }
        }

        args.Columns = ColumnsToExport;
    }

    private async Task ExportGridWithOtherColumns()
    {
        await JS.InvokeVoidAsync("clickExportCommandButton");
    }

    protected override void OnInitialized()
    {
        var rnd = Random.Shared;

        for (int i = 1; i <= 7; i++)
        {
            GridData.Add(new Product()
            {
                Id = i,
                Name = $"Name {i} {(char)rnd.Next(65, 91)}{(char)rnd.Next(65, 91)}",
                Group = $"Group {i % 3 + 1}",
                Price = rnd.Next(1, 100) * 1.23m,
                Quantity = rnd.Next(0, 10000),
                Released = DateTime.Today.AddDays(-rnd.Next(60, 1000)),
                Discontinued = i % 4 == 0
            });
        }
    }

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; } = string.Empty;
        public string Group { get; set; } = string.Empty;
        public decimal Price { get; set; }
        public int Quantity { get; set; }
        public DateTime Released { get; set; }
        public bool Discontinued { get; set; }
    }
}

Unplanned
Last Updated: 31 Oct 2025 12:16 by Scott
The column menu correctly repositions itself (to the left or top) when first opened, depending on available screen space. However, when expanding a submenu such as Columns, the menu does not adjust its position to ensure the expanded content remains visible within the viewport.
Unplanned
Last Updated: 30 Oct 2025 15:22 by Eric
  • If you select a row and then unselect that row (SelectedItems is empty), and hit the incorrectly enabled delete button, it removes a row that has not been selected. When there is no selected row, the delete tool should be disabled.
  • If you use multiple selection, the delete tool will delete the last row, which is unexpected. It should delete all selected rows.

Workaround:

<TelerikGrid Data="@GridData"
             SelectionMode="@GridSelectionMode.Multiple"
             SelectedItems="@SelectedItems"
             SelectedItemsChanged="@( (IEnumerable<Employee> newSelected) => OnSelectedItemsChanged(newSelected) )"
             Height="300px">
    <GridToolBarTemplate>
        <TelerikButton Enabled="@(SelectedItems.Any())" OnClick="@DeleteSelectedEmployees">Delete</TelerikButton>
    </GridToolBarTemplate>
    <GridColumns>
        <GridCheckboxColumn SelectAll="true" />
        <GridColumn Field="Name" Title="Name" />
        <GridColumn Field="Team" Title="Team" />
    </GridColumns>
</TelerikGrid>

@code {
    private List<Employee> GridData { get; set; } = Enumerable.Range(1, 10).Select(i => new Employee
    {
        EmployeeId = i,
        Name = $"Employee {i}",
        Team = $"Team {i % 3}"
    }).ToList();

    private List<Employee> SelectedItems { get; set; } = new();

    private void OnSelectedItemsChanged(IEnumerable<Employee> items)
    {
        SelectedItems = items.ToList();
    }

    private void DeleteSelectedEmployees()
    {
        if (SelectedItems.Any())
        {
            GridData = GridData.Except(SelectedItems).ToList();
            SelectedItems.Clear();
        }
    }

    public class Employee
    {
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public string Team { get; set; }
        public override bool Equals(object obj) => obj is Employee e && e.EmployeeId == EmployeeId;
        public override int GetHashCode() => EmployeeId.GetHashCode();
    }
}

Unplanned
Last Updated: 30 Oct 2025 12:37 by ADMIN

Hello,

We've come across a bug. It seems as whatever tool button(s) that should be selected is not shown correctly. It appears to show the previously selected.

 

Repro steps:

  1. Write two different formatted texts on separate lines in your Editor component.
  2. Move the cursor to the first line
  3. Move the cursor to the second line that has a different formatted text. Note that the tool button for the formatted text on the first line is shown as selected.

    This should happen:

 

Is this an intended behaviour? Our users are confused :)

/Patrik

Unplanned
Last Updated: 27 Oct 2025 11:21 by Deasun
Created by: Emil
Comments: 4
Category: UI for Blazor
Type: Feature Request
6
Is there a chance that there will be added a Treemap component in the near future?
Unplanned
Last Updated: 24 Oct 2025 10:25 by Bjørnar
Created by: Bjørnar
Comments: 0
Category: Upload
Type: Bug Report
1

Description

Image is not uploaded in 2 scenarios on Chrome for Android 16.

Steps To Reproduce

On a device with Android go to https://demos.telerik.com/blazor-ui/upload/validation

Case 1:

  1. Tap on the "Select files..." button in the Upload Image TelerikUpload
  2. Choose Camera and take a photo.
  3. Choose Retry and take another photo.
  4. Tap Ok

Case 2:

  1. Tap on the "Select files..." button in the Upload Image TelerikUpload
  2. Choose "Photos and Videos".
  3. Preview the image
  4. From the image preview, go back to the list of images and select the image you've just previewed

Actual Behavior

In both cases the image is not uploaded.

Expected Behavior

The image is uploaded

Browser

Chrome

Last working version of Telerik UI for Blazor (if regression)

No response

Unplanned
Last Updated: 23 Oct 2025 19:04 by Integrateurs-PES

When displaying the LoaderContainer spinner overlay, the visual blocking works correctly (the spinner appears over the entire page). However, users can still navigate through interactive elements behind the loader using the keyboard — for example, by pressing Tab or Shift+Tab.

They can even trigger buttons or input actions using the Space or Enter keys while the loader is active.

Unplanned
Last Updated: 22 Oct 2025 07:54 by Ak
Make the demos possible to launch from a desktop shortcut, similarly to the UI for ASP.NET Core demos. 
Unplanned
Last Updated: 20 Oct 2025 07:58 by Niraj
When configuring fields in the PivotGrid Configurator, selected fields that are not assigned to Rows, Columns, or Measures get unchecked after clicking the "Apply" button. This results in users losing their field selections.
1 2 3 4 5 6