Completed
Last Updated: 29 Sep 2026 08:39 by ADMIN
Release 2026 Q2

There is an undocumented breaking change in the selection behavior of the v13.0.0 TreeView component that prevents us from upgrading from v12.3.0.

In v12.3.0, selecting a TreeView checkbox does change the TreeView item selection or trigger the selection change events. In v13.0.0, checking an item does also change the selection. The v12.3.0 behavior is important for our implementation because selecting a TreeView item in our application fetches data from a database and we do not want the performance overhead of those calls when checking an item---we want the user to be able to select multiple items and only then explicitly fetch the data for all of them.

I've created a minimal example here: https://blazorrepl.telerik.com/cqYdEePd40Zq3ava43. You can see the behavior differences when switching between versions.

Please let me know if there's any additional information we can provide. A workaround to this behavior would be appreciated. Thank you!

Completed
Last Updated: 29 Sep 2026 08:36 by ADMIN
Release 2026 13.1.0 (Mar)

How to reproduce:

  1. Go to https://demos.telerik.com/blazor-ui/grid/editing-incell
  2. Go to the last Grid page, which has empty space below the last table row.
  3. Open any Grid cell for editing.
  4. Click on the empty space in the Grid below the last table row.
  5. The Grid does not exit edit mode like it should.

The regression was introduced in version 12.2.0. The last version that works correctly is 12.0.0.

The possible workarounds are:

@using System.ComponentModel.DataAnnotations
@using Telerik.DataSource
@using Telerik.DataSource.Extensions

<TelerikGrid @ref="@GridRef"
             OnRead="@OnGridRead"
             TItem="@Product"
             EditMode="@GridEditMode.Incell"
             OnCreate="@OnGridCreate"
             OnDelete="@OnGridDelete"
             OnUpdate="@OnGridUpdate"
             Height="600px">
    <GridToolBarTemplate>
        <GridCommandButton Command="Add">Add Item</GridCommandButton>
    </GridToolBarTemplate>
    <GridColumns>
        <GridColumn Field="@nameof(Product.Name)">
            <EditorTemplate>
                @{ var dataItem = (Product)context; }
                <span @onfocusout="@( async () => await OnGridCellFocusOut(nameof(Product.Name)) )">
                    <TelerikTextBox @bind-Value="@dataItem.Name" />
                </span>
            </EditorTemplate>
        </GridColumn>
        @* <GridColumn Field="@nameof(Product.Price)" DisplayFormat="{0:C2}" />
        <GridColumn Field="@nameof(Product.Quantity)" DisplayFormat="{0:N0}" />
        <GridColumn Field="@nameof(Product.ReleaseDate)" DisplayFormat="{0:d}" /> *@
        <GridColumn Field="@nameof(Product.Discontinued)" Width="120px">
            <EditorTemplate>
                @{ var dataItem = (Product)context; }
                <span @onfocusout="@( async () => await OnGridCellFocusOut(nameof(Product.Discontinued)) )">
                    <TelerikCheckBox @bind-Value="@dataItem.Discontinued" />
                </span>
            </EditorTemplate>
        </GridColumn>
        <GridCommandColumn Width="180px">
            <GridCommandButton Command="Delete">Delete</GridCommandButton>
        </GridCommandColumn>
    </GridColumns>
</TelerikGrid>

@code {
    private TelerikGrid<Product>? GridRef { get; set; }

    private ProductService GridProductService { get; set; } = new();

    private async Task OnGridCellFocusOut(string field)
    {
        await Task.Delay(100);

        if (GridRef is null)
        {
            return;
        }

        GridState<Product> gridState = GridRef.GetState();
        Product? editItem = gridState.EditItem as Product;

        if (editItem is null)
        {
            return;
        }

        GridCommandEventArgs args = new GridCommandEventArgs()
        {
             Field = field,
             Item = editItem
        };

        await OnGridUpdate(args);


        gridState.EditField = default;
        gridState.EditItem = default!;
        gridState.OriginalEditItem = default!;

        await GridRef.SetStateAsync(gridState);
    }

    private async Task OnGridCreate(GridCommandEventArgs args)
    {
        var createdItem = (Product)args.Item;

        await GridProductService.Create(createdItem);
    }

    private async Task OnGridDelete(GridCommandEventArgs args)
    {
        var deletedItem = (Product)args.Item;

        await GridProductService.Delete(deletedItem);
    }

    private async Task OnGridRead(GridReadEventArgs args)
    {
        DataSourceResult result = await GridProductService.Read(args.Request);

        args.Data = result.Data;
        args.Total = result.Total;
        args.AggregateResults = result.AggregateResults;
    }

    private async Task OnGridUpdate(GridCommandEventArgs args)
    {
        var updatedItem = (Product)args.Item;

        await GridProductService.Update(updatedItem);
    }

    public class Product
    {
        public int Id { get; set; }
        [Required]
        public string Name { get; set; } = string.Empty;
        public string Description { get; set; } = string.Empty;
        public decimal? Price { get; set; }
        public int Quantity { get; set; }
        [Required]
        public DateTime? ReleaseDate { get; set; }
        public bool Discontinued { get; set; }
    }

    #region Data Service

    public class ProductService
    {
        private List<Product> Items { get; set; } = new();

        private int LastId { get; set; }

        public async Task<int> Create(Product product)
        {
            await SimulateAsyncOperation();

            product.Id = ++LastId;

            Items.Insert(0, product);

            return LastId;
        }

        public async Task<bool> Delete(Product product)
        {
            await SimulateAsyncOperation();

            if (Items.Contains(product))
            {
                Items.Remove(product);

                return true;
            }

            return false;
        }

        public async Task<List<Product>> Read()
        {
            await SimulateAsyncOperation();

            return Items;
        }

        public async Task<DataSourceResult> Read(DataSourceRequest request)
        {
            return await Items.ToDataSourceResultAsync(request);
        }

        public async Task<bool> Update(Product product)
        {
            await SimulateAsyncOperation();

            int originalItemIndex = Items.FindIndex(x => x.Id == product.Id);

            if (originalItemIndex != -1)
            {
                Items[originalItemIndex] = product;
                return true;
            }

            return false;
        }

        private async Task SimulateAsyncOperation()
        {
            await Task.Delay(100);
        }

        public ProductService(int itemCount = 5)
        {
            Random rnd = Random.Shared;

            for (int i = 1; i <= itemCount; i++)
            {
                Items.Add(new Product()
                {
                    Id = ++LastId,
                    Name = $"Product {LastId}",
                    Description = $"Multi-line\ndescription {LastId}",
                    Price = LastId % 2 == 0 ? null : rnd.Next(0, 100) * 1.23m,
                    Quantity = LastId % 2 == 0 ? 0 : rnd.Next(0, 3000),
                    ReleaseDate = DateTime.Today.AddDays(-rnd.Next(365, 3650)),
                    Discontinued = LastId % 2 == 0
                });
            }
        }
    }

    #endregion Data Service
}

 

Completed
Last Updated: 29 Sep 2026 08:28 by ADMIN
Release 2026 Q2

The following exception occurs:

Microsoft.JSInterop.JSDisconnectedException: JavaScript interop calls cannot be issued at this time. This is because the circuit has disconnected and is being disposed.

............

at Telerik.Blazor.Components.Common.Loader.ComponentLoaderContainer.DisposeAsync()

When the user closes the browser and the web page contains any of the below components:

  • DockManager
  • FileManager
  • Grid
  • ListView
  • PdfViewer
  • PivotGrid
  • Scheduler
  • SpreadSheet
  • TreeList

 

Completed
Last Updated: 29 Sep 2026 08:22 by ADMIN
Release 2026 Q2

When the user selects a value and then focuses on another component the OnBlur of the ComboBox is not triggered. The issue is reproducible in the Firefox browser (tested with version 109.0).

To reproduce the issue open the following REPL example in the Firefox browser:
https://blazorrepl.telerik.com/mdklmHYN06lVQjyL26

Select a value in the first ComboBox and then focus on the second ComboBox. The OnBlur event should trigger.

Completed
Last Updated: 29 Sep 2026 08:13 by ADMIN
Release 2026 15.0.1 (Aug)

Hi Telerik Support

Facing an issue with Keyboard navigation in Telerik Grid component. 

When we use TAB to navigate, the grid header gets focus only for the first time. After completing one round of navigation, second time after the Toolbar buttons, if we TAB out, focus goes to the pager sections skipping the grid header part.

Pls refer the REPL sample from Telerik website:

https://blazorrepl.telerik.com/GHOUEQPu32fDqVkl23?_ga=2.110299852.854118306.1687429777-597574975.1687340896&_gl=1*1exmltg*_ga*NTk3NTc0OTc1LjE2ODczNDA4OTY.*_ga_9JSNBCSF54*MTY4NzQyOTc3Ny40LjEuMTY4NzQzMDkxNC41Ni4wLjA. 

Steps to reproduce:

1) Use ALT + W and then use TAB key to navigate

2) First focus goes to the Toolbar button (Add Product), then goes to the Grid Header and then if we TAB again focus goes to the Pager section

3) After the Pager section, if we do steps 1 and 2 again, we can see that it skips the Grid Header focus second time onwards.

 

Completed
Last Updated: 29 Sep 2026 07:51 by ADMIN
Created by: Paul
Comments: 1
Category: Grid
Type: Feature Request
1

I would like to add some custom actions into the popup window. I know I can implement a custom edit popup with an entirely custom content and actions. However, this requires a lot of custom work to just add one additional action in the popup. Please provide an easier option to add custom actions in the edit window.

Completed
Last Updated: 29 Sep 2026 07:36 by ADMIN
Release 2026 (Oct)

Description

When the ComboBox is bound with the OnRead event, after filtering and pressing the Tab key the highlighted item that matches the user input is not selected. If the ComboBox is bound through the Data parameter, the highlighted item is selected as expected.

Steps To Reproduce

  1. Run this REPL example: https://blazorrepl.telerik.com/GKOwYyuD25UuABfR07
  2. Focus the ComboBox and type in "BMW"
  3. Press the Tab key.

Actual Behavior

The ComboBox is blurred and the BMW item is not selected.

Expected Behavior

The ComboBox is blurred and the BMW item is selected.

Browser

All

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

No response

Completed
Last Updated: 28 Sep 2026 13:32 by ADMIN
Release 2026 15.0.1 (Aug)

I have a Grid with row selection and column virtualization. After selecting all rows and zooming out my browser to 80% or less, the column virtualization stops working - data is not loaded in the cells on vertical scroll.

Reproduction REPL

Completed
Last Updated: 28 Sep 2026 09:00 by ADMIN
Release 2026 (Oct)
Component: TabStrip
Version: 14.0.0

Description:

Behavior of TabStripTab is inconsistent when working with Mouse vs Keyboard driven workflow. The  OnStateChanged  event documentation states it fires "on any change to the active tab, tab visibility, pinning, or order." In practice, this only holds true for mouse-click tab activation. Keyboard-driven tab activation (arrow keys, Home, End) changes the active tab and raises  ActiveTabIdChanged , but never raises  OnStateChanged .

This creates an inconsistency for anyone using the documented state-persistence pattern ( OnStateInit / OnStateChanged ) to save and restore the TabStrip's state: tabs selected via keyboard navigation render correctly, but are silently never persisted, since the app only listens to  OnStateChanged . On the next reload/restore, the selection reverts to the last mouse-selected tab.

Root cause (from the TabStrip source):

• Click path —  ActivateTab(TabStripTab tab) :
await SetActiveTabAsync(tab);   // raises ActiveTabIdChanged
InvokeOnStateChanged();          // raises OnStateChanged
• Keyboard path —  HandleActiveTabIdNavigationAsync(...) :
await SetActiveTabAsync(nextActiveTab);   // raises ActiveTabIdChanged only — InvokeOnStateChanged() is never called

Steps to reproduce:

1. Add a  TelerikTabStrip  with  OnStateChanged  bound to a handler that logs/persists the received  TabStripState .
2. Add 3+  TabStripTab s.
3. Click into the tab header area to focus it, then use the arrow keys (or Home/End) to move between tabs.
4. Observe: the active tab panel changes visually, but the  OnStateChanged  handler is never invoked.
5. Now click a tab header directly —  OnStateChanged  fires as expected.

Expected:  OnStateChanged  should fire for every active-tab change, regardless of whether it was triggered by mouse click or keyboard navigation, matching the documented behavior.

Actual:  OnStateChanged  only fires for mouse-click tab activation; keyboard navigation only raises  ActiveTabIdChanged .

Workaround used: Also bind  ActiveTabIdChanged  and merge the received tab id into the previously-captured/persisted state object (rather than relying on  OnStateChanged  alone).
Completed
Last Updated: 28 Sep 2026 06:58 by ADMIN
Release 2026 (Oct)
Created by: Andreas
Comments: 1
Category: Editor
Type: Bug Report
0

Even if setting ReadOnly="true", tables in the Editor can be resized...

This only happens in Iframe mode!


<TelerikEditor Height="300px" @bind-Value="@Value" EditMode="Telerik.Blazor.EditorEditMode.Iframe" ReadOnly="true">
</TelerikEditor>

@code {
    public string Value { get; set; } =
            @"
<table>
    <tbody>
        <tr>
            <td>
               Some text
            </td>
        </tr>
        <tr style=""height: 24px"">
        </tr>
        <tr>
            <td>
                Some text
            </td>
        </tr>
    </tbody>
</table>
    ";
}

Completed
Last Updated: 24 Sep 2026 14:00 by ADMIN
Release 2026 (Oct)
If the Sortable parameter is set to true, the focus after the toolbar goes to the first header cell. If the Sortable parameter is set to false, the focus skips the first header cell.
Completed
Last Updated: 24 Sep 2026 11:58 by ADMIN
Created by: BENAISSA
Comments: 7
Category: UI for Blazor
Type: Feature Request
87
I would like to be able to customize the keyboard shortcuts in all applicable components in the Telerik UI for Blazor

ADMIN EDIT: 
Closing the Feature Request as Completed. We have added keyboard customization capabilities to a few components: Grid, Wizard, ContextMenu. If you are interested in keyboard customization for other components, log separate feature requests for each component, for example: 
https://feedback.telerik.com/blazor/1709097-add-the-ability-to-customize-the-default-keyboard-shortcuts-of-the-grid-component 


Completed
Last Updated: 24 Sep 2026 11:14 by ADMIN
Release 2026 Q2
Created by: Justin
Comments: 1
Category: Chat
Type: Feature Request
8

We are using the blazor chat component with Microsoft.Extensions.AI and IChatClient. Currently during a long response stream the chat repeatedly scrolls to the bottom automatically as the response updates. When I use use my mouse wheel to scroll to the top it immediately auto scrolls me back to the bottom.

A user needs to be able scroll to the top as the response is streaming in. If the user manually scrolls the auto scrolling should stop. Any subsequent messages sent in the same chat session should resume auto scroll. This is the behavior seen in most AI chat interfaces like chatGPT and is what most users expect. 

For more info and a video refer to support ticket: 1712888

Thanks, Justin.

Completed
Last Updated: 24 Sep 2026 10:39 by ADMIN
Release 2026 Q2

OnChange and OnBlur event for editors (TelerikTextBox, NumericTextBox, and others) is not fired in InCell edit mode with Tab key.

 

Completed
Last Updated: 24 Sep 2026 10:38 by ADMIN
Release 2026 14.1.0 (Jul)
The CheckBoxList FilterMeny type does not render correct results when the Grid is bound to ExpandoObject. If you try to filter the Grid will return No results.
Completed
Last Updated: 24 Sep 2026 10:35 by ADMIN
Release 2026 (Oct)
Created by: Peter
Comments: 0
Category: Editor
Type: Bug Report
5

I am using the InsertHTML command to insert some HTML content. However, it looks like it inserts only the first element from the value I am providing.

 

==========

ADMIN EDIT

==========

Workaround:  you can wrap the HTML content you want to insert in a container, so the InsertHTML command reads it as one element. The following sample demonstrates how to achieve that.

 

@using Telerik.Blazor.Components.Editor

<TelerikButton OnClick="@( () => WindowIsVisible = !WindowIsVisible )">Insert Html</TelerikButton>

<TelerikEditor @ref="@TheEditor" @bind-Value="@TheContent"></TelerikEditor>

<TelerikWindow @bind-Visible="@WindowIsVisible">
    <WindowTitle>
        <strong>Insert Html</strong>
    </WindowTitle>
    <WindowContent>
        <TelerikTextArea @bind-Value="@HtmlToInsert"></TelerikTextArea>
        <TelerikButton OnClick="@InsertHtml">Insert</TelerikButton>
    </WindowContent>
</TelerikWindow>

@code{

    public string HtmlToInsert { get; set; }

    bool WindowIsVisible { get; set; }

    TelerikEditor TheEditor { get; set; }

    string TheContent { get; set; } = "<p>Lorem ipsum.</p><p>Dolor sit amet.</p>";

    async Task InsertHtml()
    {
        await TheEditor.ExecuteAsync(new HtmlCommandArgs("insertHtml", $"<div>{HtmlToInsert}</div>"));

        WindowIsVisible = !WindowIsVisible;

        HtmlToInsert = "";
    }
}

 

Completed
Last Updated: 24 Sep 2026 10:33 by ADMIN
Release 2026 Q2
I am using a bool property to control whether the columns of the Grid would be virtualized. When I try to toggle the value of this property the feature is not enabled or disabled accordingly. 
Completed
Last Updated: 24 Sep 2026 10:32 by ADMIN
Release 2026 14.1.0 (Jul)

The NumericTextBox does not render the new Value that is set in ValueChanged if this new value is different than the event argument. Instead, the component clears the textbox, even though the component Value parameter is correct.

https://blazorrepl.telerik.com/wzaAHYas221go9xd48

The problem occurs only if there is an existing value and the user removes it with Backspace.

Completed
Last Updated: 24 Sep 2026 10:30 by ADMIN
Release 2026 Q2
The parameters "Resizable" and "Reorderable" let you control whether tiles can be resized and reordered. These work when using the mouse, but once you turn on keyboard navigation via setting the parameter "Navigable" to "true", you are able to resize and reorder the tiles using "Ctrl"/"Shift" + "Arrow keys", regardless of the parameter values for "Resizable" and "Reorderable".
Completed
Last Updated: 24 Sep 2026 10:29 by ADMIN
Release 2026 Q2

The value in a numeric textbox cannot be changed for negative numerbes unless you erase all the text and restart.

 

<TelerikNumericTextBox Decimals="4"Max="5"Value="-4.56m"Id="general"></TelerikNumericTextBox>

 

    
1 2 3 4 5 6