Completed
Last Updated: 05 Feb 2026 13:58 by ADMIN
Created by: Martin
Comments: 0
Category: PDFViewer
Type: Bug Report
1

The PDF Viewer uses adopted stylesheets, but removes third-party ones in the process.

This occurs since Telerik UI for Blazor version 7.0.0.

The workaround is to duplicate the third-party adoptedStylesheet as a regular CSS file.

Completed
Last Updated: 05 Feb 2026 11:46 by ADMIN
When you use Virtual Scrolling you cannot control the scroll position with the Skip parameter if the data is received after initializing the GridState.
Unplanned
Last Updated: 04 Feb 2026 12:59 by Martin

When ActiveTabId is null, the TabStrip selects the first tab automatically, but does not render its content.

<TelerikTabStrip @bind-ActiveTabId="@TabStripActiveTabId">
    <TabStripTab Title="First" Id="t1">
        First tab content.
    </TabStripTab>
    <TabStripTab Title="Second" Id="t2">
        Second tab content.
    </TabStripTab>
    <TabStripTab Title="Third" Id="t3">
        Third tab content.
    </TabStripTab>
</TelerikTabStrip>

@code {
    private string? TabStripActiveTabId { get; set; }
}

Unplanned
Last Updated: 04 Feb 2026 11:11 by Lukasz

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

Unplanned
Last Updated: 03 Feb 2026 16:07 by Nicola

Description

The byte array returned by the GetFileAsync method is different when the file is opened through the PDFViewer's toolbar, and when the file is loaded initially using the Data parameter of the PDFViewer.

Steps To Reproduce

  1. Use the example below and the attached exemplary .pdf document.
  2. Place a breakpoint in OnDownloadExportedFileClick
  3. Run the example.
    Scenario 1: when the page loads and the attached file is loaded in the PDFViewer, click the button above the PDFViewer.
    Scenario 2: when the page loads, open the attached file in the PDFViewer, through the Open toolbar tool. Click the button above the PDFViewer.
@using System.IO
@inject IJSRuntime JSRuntimeInstance
@inject HttpClient HttpClient
@inject NavigationManager NavigationManager

<PageTitle>Home</PageTitle>

<p>
    <TelerikButton OnClick="@OnDownloadExportedFileClick">Get file with GetFileAsync and download</TelerikButton>
</p>

<strong>@TestResult</strong>

<br />
<br />

<TelerikPdfViewer @ref="@PdfViewerRef"
                    Data="@PdfViewerData"
                    AnnotationMode="@PdfViewerAnnotationMode.EnableForms"
                    Height="400px">
</TelerikPdfViewer>

@code {
    #nullable enable

    private TelerikPdfViewer? PdfViewerRef { get; set; }
    private byte[]? PdfViewerData { get; set; }

    private string TestResult { get; set; } = string.Empty;

    public async Task OnDownloadExportedFileClick()
    {
        var result = await PdfViewerRef.GetFileAsync();

        TestResult = $"First PDF Viewer GetFileAsync() returned {result} at {DateTime.Now.ToString("HH:mm:ss")}";

        var base64String = Convert.ToBase64String(result);
        var dataUrl = ToDataUrl("application/pdf", base64String);
        _ = SaveFileAsDataUrlAsync("export.pdf", dataUrl);
    }

    private protected ValueTask SaveFileAsDataUrlAsync(string fileName, string dataUrl)
    {
        return InvokeVoidAsync("saveFile", fileName, dataUrl);
    }

    protected virtual ValueTask InvokeVoidAsync(string methodName, params object[] args)
    {
        try
        {
            return JSRuntimeInstance.InvokeVoidAsync($"TelerikBlazor.{methodName}", args);
        }
        catch (Exception)
        {
            return default;
        }
    }

    private protected string ToDataUrl(string mimeType, string base64String)
    {
        return $"data:{mimeType};base64,{base64String}";
    }

    protected override async Task OnInitializedAsync()
    {
        PdfViewerData = System.IO.File.ReadAllBytes(@"pdf-viewer-form-filling-original.pdf");
        await Task.Delay(1);
    }
}

pdf-viewer-form-filling-original.pdf

Actual Behavior

The breakpoint in OnDownloadExportedFileClick is hit. Observe the difference in the byte array returned by the GetFileAsync method and saved in the "result" variable:

Image Image

Expected Behavior

The byte array should be identical, regardless of the method of opening the file in the PDFViewer.

Browser

All

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

No response

Completed
Last Updated: 03 Feb 2026 15:18 by ADMIN
Created by: Ted
Comments: 1
Category: UI for Blazor
Type: Bug Report
0
Where is the latest Telerik for Blazor Accessibility Conformance Report? The one on this page is over two years old: https://www.telerik.com/blazor-ui/documentation/accessibility/compliance#accessibility-conformance-report

Most organizations follow a 12-month cycle or update their ACR whenever there's a significant product version change, whichever comes first, to remain in good standing.

Please update the latest Telerik for Blazor Accessibility Conformance Report for the current version of Telerik for Blazor. We need these reports for the US States that use our software and Telerik for Blazor. Without current, valid VPATs, we will have to discontinue use of Telerik for Blazor.

DevExpress for Blazor has a current VPAT here for example (latest report Dec, 2025): https://www.devexpress.com/products/net/accessibility/ACR-DevExpress-Blazor-25.2.pdf
Unplanned
Last Updated: 03 Feb 2026 10:36 by ADMIN

The issue occurs only if the Signature is initially rendered in a container with display: none style. If I use visibility: hidden, I don't see a problem.

Real use case in which this is a problem: an accordion where the second pane is not opened.

Reproduction code: https://blazorrepl.telerik.com/QfYeuZPv28LlBmBx56.

Steps to reproduce:

  1. Test signinig in the Signature #1 pane - Signature behaves properly.
  2. Open the  Signature #2 pane and test signing - the scale is wrong.
Planned
Last Updated: 02 Feb 2026 07:55 by ADMIN
Scheduled for 2026 Q1 (Feb)
Created by: Michal
Comments: 3
Category: UI for Blazor
Type: Bug Report
0

Hello,

 at version 12.3.0 TelerikFilter is crashing "at load". Prior this version, same markup = ok.

Error: System.InvalidOperationException: Object of type 'Telerik.Blazor.Components.TelerikFilter' does not have a property matching the name 'ValueChanged'.

also in demo:

https://www.telerik.com/blazor-ui/documentation/components/filter/integration

usage:

<TelerikFilter @bind-Value="@AdvancedFilterValue">
	<FilterFields>
		@foreach (var it in GridDef.ColStore.Where(x => x.Verejny == true))
		{
			<FilterField Name="@it.FldName" Type="@it.FldType" Label="@it.VerejnyNazev"></FilterField>
		}
	</FilterFields>
</TelerikFilter>
Declined
Last Updated: 30 Jan 2026 13:52 by ADMIN

The TelerikPanelBar component is using Right and Left arrows on keyboard to opening and closing each tab. 
https://demos.telerik.com/blazor-ui/panelbar/keyboard-navigation

When the page is zoomed to 200%, it gets a horizontal scrollbar, which is normally controlled with the left and right arrow keys on keyboard. However, these keys are assigned to opening and closing the TelerikPanelBar component, which makes it impossible to scroll the page horizontally while we have Tab on TelerikPanelBar. Is there any workaround that would allow horizontal scrolling with the left and right arrow keys on keyboard at this zoom level? Maybe it’s possible to change TelerikPanelBar behavior and opening and closing it by different keys?

Unplanned
Last Updated: 29 Jan 2026 15:17 by Niraj

Description

The data order displayed in the PivotGrid does not follow the field order shown in the Rows configuration. Similar issue: #12989

Steps To Reproduce

  1. Run the example posted below:

  2. From the Fields list, check ContractNumber. It is added to the Columns section by default.

  3. Drag ContractNumber from Columns to the Rows section.

  4. Verify in the PivotGrid settings that the Rows area now shows:

    • Station
    • ContractNumber
      (in this order)
  5. View the data the table.

@using Telerik.Blazor.Components.PivotGrid

<TelerikButton OnClick="@OnRefresh">Refresh</TelerikButton>
<TelerikLoaderContainer Visible="@_isLoading" Text="Please wait..." />

<div class="pivot-main-container">
    <TelerikPivotGridContainer>
        <TelerikPivotGridConfiguratorButton></TelerikPivotGridConfiguratorButton>
        <TelerikPivotGridConfigurator></TelerikPivotGridConfigurator>
        <div class="pivot-grid-container">
            <TelerikPivotGrid Data="@PivotData" DataProviderType="@PivotGridDataProviderType.Local"
                              @ref="_PivotGridRef" ColumnHeadersWidth="100px" RowHeadersWidth="130px">
                <ColumnHeaderTemplate>
                    @{
                        var ctx = (PivotGridColumnHeaderTemplateContext)context;
                        int underscoreIndex = ctx.Text.IndexOf("-");
                        string text = ctx.Text;
                        if (underscoreIndex > 0)
                        {
                            text = text.Replace(text.Substring(0, underscoreIndex + 1), "");
                            <span>@text</span>
                        }
                        else
                        {
                            <span>@ctx.Text</span>
                        }
                    }
                </ColumnHeaderTemplate>

                <RowHeaderTemplate>
                    @{
                        var ctx = (PivotGridRowHeaderTemplateContext)context;
                        int underscoreIndex = ctx.Text.IndexOf("-");
                        if (underscoreIndex == 1)
                        {
                            string text = ctx.Text;
                            text = text.Replace(text.Substring(0, underscoreIndex + 1), "");
                            <span>@text</span>
                        }
                        else
                        {
                            <span>@ctx.Text</span>
                        }
                    }
                </RowHeaderTemplate>

                <DataCellTemplate Context="dataCellContext">
                    @{
                        var c = (PivotGridDataCellTemplateContext)dataCellContext;
                        string amt;

                        if (c.Value is AggregateException || c.Value?.GetType().Name == "AggregateError")
                        {
                            amt = "-";
                        }

                        else if (c.Value == null)
                        {
                            amt = (0m).ToString("C2");
                        }
                        else if (c.Value is IConvertible)
                        {
                            // Safe convert for numbers
                            amt = Convert.ToDecimal(c.Value).ToString("C2");
                        }
                        else
                        {
                            amt = c.Value?.ToString() ?? string.Empty;
                        }
                    }
                    <div style="text-align: right;">
                        @amt
                    </div>
                </DataCellTemplate>


                <PivotGridRows>
                    <PivotGridRow Name="@nameof(RptContractSalesSummaryModel.Station)" Title="Station" />
                </PivotGridRows>

                <PivotGridColumns>
                    <PivotGridColumn Name="@nameof(RptContractSalesSummaryModel.Year)" Title="Year" HeaderClass="year-header" />
                    <PivotGridColumn Name="@nameof(RptContractSalesSummaryModel.Month)" Title="Month" />
                </PivotGridColumns>

                <PivotGridMeasures>
                    <PivotGridMeasure Name="@nameof(RptContractSalesSummaryModel.Rate)" Title="Total"
                                      Aggregate="@PivotGridAggregateType.Sum" />
                </PivotGridMeasures>
            </TelerikPivotGrid>
        </div>
    </TelerikPivotGridContainer>
</div>


@code
{
    private List<RptContractSalesSummaryModel> PivotData { get; set; } = [];
    public TelerikNotification NotificationReference { get; set; } = default!;
    public TelerikPivotGrid<RptContractSalesSummaryModel> _PivotGridRef { get; set; } = default!;
    private CancellationTokenSource cancelToken = new CancellationTokenSource();
    private bool _isDisposed { get; set; } = default!;
    private bool _isLoading { get; set; } = default!;


    protected override async Task OnInitializedAsync()
    {
        await LoadReportData(cancelToken.Token);
        await base.OnInitializedAsync();
    }

    private async Task LoadReportData(CancellationToken token)
    {
        _isLoading = true;
        await Task.Delay(1000);

        var dataItemCount = 10000;
        var stationCount = 30;
        var rnd = Random.Shared;

        for (int i = 1; i <= dataItemCount; i++)
        {
            var stationNumber = rnd.Next(1, stationCount);
            if (token.IsCancellationRequested || _isDisposed) { return; }
            ;
            PivotData.Add(new RptContractSalesSummaryModel()
            {
                Station = $"Station {stationNumber}",
                ContractMonth = DateTime.Today.AddMonths(-rnd.Next(0, 13)),
                Rate = rnd.Next(123, 987) * 1.23m,
                ContractNumber = i,
                InternetOrderID = i * 10
            });
        }

        PivotData = PivotData
                        .OrderBy(x => x.Station)
                        .ThenBy(x => x.Year)
                        .ThenBy(x => x.Month).ToList();

        if (_PivotGridRef != null && !_isDisposed)
        {
            _PivotGridRef?.Rebind();
        }

        _isLoading = false;
    }

    public async Task OnRefresh()
    {
        await LoadReportData(cancelToken.Token);
        await Task.CompletedTask;
    }

    public async ValueTask DisposeAsync()
    {
        PivotData = [];
        await Task.CompletedTask;
    }

    public class RptContractSalesSummaryModel
    {
        public DateTime ContractMonth { get; set; }
        public int Year => ContractMonth.Year;
        public string Month => $"{MapMonthToLetter(ContractMonth.Month)}-{ContractMonth:MMMM}";
        public string Station { get; set; } = string.Empty;
        public string? SalesPerson { get; set; }
        public string? AdvertiserName { get; set; }
        public string? AgencyName { get; set; }
        public string? Product_Description { get; set; }
        public string? Brand { get; set; }
        public string AccountType1 { get; set; } = string.Empty;
        public string AccountType2 { get; set; } = string.Empty;
        public decimal? Rate { get; set; }
        //public int? RptUserKey { get; set; }
        public string? Demographics { get; set; }
        public string? OrderType { get; set; }
        public string? SalesOffice { get; set; }
        public int? ContractNumber { get; set; }
        public string? SectionLevel { get; set; }
        public string? AgencyGroup { get; set; }
        public string? AdvertiserGroup { get; set; }
        public string? ProductGroup { get; set; }
        public string? LineNumber { get; set; }
        public string? RevenueClassDescription { get; set; }
        public string? InternetIntegrationType { get; set; }
        public string? LineType { get; set; }
        public string? RateType { get; set; }
        public string? InternetAdType { get; set; }
        public string? InternetSubAdType { get; set; }
        public DateTime? LineStartDate { get; set; }
        public DateTime? LineEndDate { get; set; }
        public long? InternetOrderID { get; set; }
        public DateTime? InitialDelivery { get; set; }
        public string? QuantityType { get; set; }
        public long? QuantityOrdered { get; set; }
        public long? ImpressionsDelivered { get; set; }
        public long? ClicksDelivered { get; set; }
        public long? Goal { get; set; }
        public string? Limit { get; set; }
        public string? BillingType { get; set; }
        public decimal? DeliveredRevenue { get; set; }
        public string? PerformanceStatus { get; set; }
        public DateTime? LastSuccessfulJobRun { get; set; }
        public string? InternetEnvironment { get; set; }
        public string? UserField1 { get; set; }
        public string? ExternalID { get; set; }

        // to sort the months correctly in the pivot grid
        private static string MapMonthToLetter(int month)
        {
            return month switch
            {
                1 => "A",
                2 => "B",
                3 => "C",
                4 => "D",
                5 => "E",
                6 => "F",
                7 => "G",
                8 => "H",
                9 => "I",
                10 => "J",
                11 => "K",
                12 => "L",
                _ => "?"
            };
        }
    }
}

Actual Behavior

The data order displayed in the PivotGrid does not follow the field order shown in the Rows configuration.

Image

Expected Behavior

The rendered PivotGrid data should strictly follow the order of fields as defined in the Rows (or Columns) area settings.

Browser

All

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

No response

In Development
Last Updated: 29 Jan 2026 13:15 by ADMIN
Scheduled for 2026 Q1 (Feb)
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: 29 Jan 2026 11:55 by Eric

When there is no predefined Diagram layout, and a shape parameter value changes at runtime:

  • If there are no connections, all shape positions are reset and the shapes display in a single row.
  • If there are connections, the overall layout persists, but all shape positions change.

Possible workarounds:

To reproduce:

<label class="lbl">
    Width: <TelerikNumericTextBox @bind-Value="@SelectedShapeWidth" Width="120px" />
</label>

<label class="lbl">
    Height: <TelerikNumericTextBox @bind-Value="@SelectedShapeHeight" Width="120px" />
</label>

<label class="lbl">
    X: <TelerikNumericTextBox @bind-Value="@SelectedShapeX" Width="120px" />
</label>

<label class="lbl">
    Y: <TelerikNumericTextBox @bind-Value="@SelectedShapeY" Width="120px" />
</label>

<label class="lbl">
    Angle: <TelerikNumericTextBox @bind-Value="@SelectedShapeAngle" Width="120px" />
</label>

<style>
    .lbl {
        display: block;
        margin: 0 0 1em;
    }
</style>

<TelerikButton OnClick="@OnButtonClick">Apply</TelerikButton>

@if (RenderDiagram)
{
    <TelerikDiagram Height="300px" Zoom="0.8">
        <DiagramShapes>
                <DiagramShape
                            Id="shape1"
                            Width="100"
                            Height="100"
                            X="200"
                            Y="50">
                    <DiagramShapeContent Text="Shape 1" />
                    <DiagramShapeRotation Angle="0" />
                </DiagramShape>
                <DiagramShape
                            Id="@SelectedShapeId"
                            Width="@SelectedShapeWidth"
                            Height="@SelectedShapeHeight"
                            X="@SelectedShapeX"
                            Y="@SelectedShapeY">
                    <DiagramShapeContent Text="Shape 2" />
                    <DiagramShapeRotation Angle="@SelectedShapeAngle" />
                </DiagramShape>
        </DiagramShapes>
    </TelerikDiagram>

    <TelerikDiagram Height="300px" Zoom="0.8">
        <DiagramShapes>
                <DiagramShape
                            Id="shape1"
                            Width="100"
                            Height="100"
                            X="200"
                            Y="50">
                    <DiagramShapeContent Text="Shape 1" />
                    <DiagramShapeRotation Angle="0" />
                </DiagramShape>
                <DiagramShape
                            Id="@SelectedShapeId"
                            Width="@SelectedShapeWidth"
                            Height="@SelectedShapeHeight"
                            X="@SelectedShapeX"
                            Y="@SelectedShapeY">
                    <DiagramShapeContent Text="Shape 2" />
                    <DiagramShapeRotation Angle="@SelectedShapeAngle" />
                </DiagramShape>
        </DiagramShapes>
        <DiagramConnections>
            <DiagramConnection FromId="shape1" ToId="shape2" />
        </DiagramConnections>
    </TelerikDiagram>
}

@code {
    #nullable enable

    private List<ShapeDescriptor> DiagramShapeList { get; set; } = new();

    private string SelectedShapeId { get; set; } = "shape2";
    private double? SelectedShapeAngle { get; set; } = 0;
    private double? SelectedShapeWidth { get; set; } = 100;
    private double? SelectedShapeHeight { get; set; } = 100;
    private double? SelectedShapeX { get; set; } = 300;
    private double? SelectedShapeY { get; set; } = 200;

    private bool RenderDiagram { get; set; } = true;

    private async Task OnButtonClick()
    {
        if (string.IsNullOrEmpty(SelectedShapeId))
        {
            return;
        }

        RenderDiagram = false;
        await Task.Delay(1);

        RenderDiagram = true;
    }

    public class ShapeDescriptor
    {
        public string Id { get; set; } = string.Empty;
        public string ParentId { get; set; } = string.Empty;
        public DiagramShapeType Type { get; set; } = DiagramShapeType.Image;
        public string Text { get; set; } = string.Empty;
        public string Source { get; set; } = string.Empty;
        public double? Width { get; set; } = 100;
        public double? Height { get; set; } = 100;
        public double? X { get; set; }
        public double? Y { get; set; }
        public double? Angle { get; set; }
    }
}

In Development
Last Updated: 28 Jan 2026 10:12 by ADMIN
Scheduled for 2026 Q1 (Feb)
Created by: Niraj
Comments: 1
Category: PivotGrid
Type: Bug Report
1
Hello Telerik Support Team,

We are encountering an issue in **Telerik PivotGrid for Blazor (v12)** related to field selection behavior.

**Issue Summary**
When a field is selected from the field list/configurator, it is correctly added to the **Columns** area. However, when the same field is later unchecked (removed), it continues to remain in the Columns section and is still displayed in the report.

**Steps to Reproduce**

1. Load the PivotGrid with data.
2. Open the field list/configurator.
3. Check a field (e.g. InternetOrderID) to add it to the report (it appears in the Columns area as expected).
4. Uncheck the same field to remove it.
5. Observe that the field still appears in the **Columns** section and remains visible in the grid.

**Actual Behavior**
Unchecking a field does not remove it from the Columns area. The field remains active and visible in the PivotGrid.

**Expected Behavior**
When a field is unchecked in the configurator, it should be fully removed from the Columns area and no longer displayed in the grid.

I have added a zip file for reference.

Regards,
Niraj Phalke
Unplanned
Last Updated: 28 Jan 2026 09:12 by ADMIN
Hello Telerik Support Team,

We are experiencing a scrolling issue in **Telerik PivotGrid for Blazor (v12)** when both vertical and horizontal scrollbars are present.

**Issue Summary**
When the PivotGrid contains enough expanded data to require both vertical and horizontal scrolling, interacting with one scrollbar causes the grid to unexpectedly reset the other scroll position (jumping back to the top or left-most column).

**Steps to Reproduce**
e.g.: https://demos.telerik.com/blazor-ui/pivotgrid/overview

1. Bind the PivotGrid with a large dataset.
2. Expand a column hierarchy (e.g., Year → Months) to generate horizontal scrolling.
3. Expand multiple row groups (some near the top and some further down) to generate vertical scrolling.
4. Scroll fully to the **right**.
5. Attempt to scroll **down** using the vertical scrollbar or mouse wheel.

   * The grid scrolls down, but the horizontal position resets to the first column.
6. Scroll to the **bottom**.
7. Attempt to scroll **right** using the horizontal scrollbar.

   * The grid scrolls right, but the vertical position resets to the top.

**Actual Behavior**
Scrolling in one direction causes the PivotGrid to reset the scroll position in the other direction.

**Expected Behavior**
Vertical and horizontal scroll positions should remain independent. Scrolling in one direction should not reset the other.

This occurs consistently when multiple row and column groups are expanded and both scrollbars are active.

Please let us know if additional configuration details or a sample project would help.

Regards,
Niraj Phalke
Unplanned
Last Updated: 26 Jan 2026 12:51 by ADMIN

Product & Version:
Telerik UI for Blazor v12
.NET 8

Description:
In the Telerik Blazor PivotGrid, when fields are added dynamically (via UI interaction), the fields are placed in the PivotGrid based on the order in which they are defined in the Fields collection, rather than the order in which the user selects or adds them.

This results in an unexpected field arrangement from a user experience perspective, as users expect the PivotGrid to reflect the sequence in which they add fields (especially when adding multiple fields one by one).

Expected Behavior:
Fields should be added to the PivotGrid in the same order as the user clicks/selects them.

Actual Behavior:
Fields are added according to their original order in the PivotGridFields configuration, ignoring the user’s selection order.

Impact:
This causes confusion for end users and limits flexibility in interactive PivotGrid scenarios where field order matters.

Request:
Please confirm if this behavior is expected. If so, is there any supported way to control or override the field insertion order based on user interaction?

<TelerikButton OnClick="@OnRefresh">Refresh</TelerikButton>
<TelerikLoaderContainer Visible="@IsLoading" Text="Please wait..." />

<TelerikPivotGridContainer>
    <TelerikPivotGridConfiguratorButton></TelerikPivotGridConfiguratorButton>
    <TelerikPivotGridConfigurator></TelerikPivotGridConfigurator>
    <TelerikPivotGrid @ref="PivotGridRef"
                      Data="@PivotData"
                      DataProviderType="@PivotGridDataProviderType.Local"
                      ColumnHeadersWidth="100px"
                      RowHeadersWidth="130px"
                      Height="70vh">
        <PivotGridRows>
            <PivotGridRow Name="@nameof(RptContractSalesSummaryModel.Station)" />
        </PivotGridRows>

        <PivotGridColumns>
            <PivotGridColumn Name="@nameof(RptContractSalesSummaryModel.Year)" />
        </PivotGridColumns>

        <PivotGridMeasures>
            <PivotGridMeasure Name="@nameof(RptContractSalesSummaryModel.Rate)" Title="Total"
                              Aggregate="@PivotGridAggregateType.Sum" />
        </PivotGridMeasures>
    </TelerikPivotGrid>
</TelerikPivotGridContainer>

@code
{
    private List<RptContractSalesSummaryModel> PivotData { get; set; } = [];
    public TelerikPivotGrid<RptContractSalesSummaryModel> PivotGridRef { get; set; } = default!;
    private CancellationTokenSource cancelToken = new CancellationTokenSource();
    private bool IsLoading { get; set; }

    protected override async Task OnInitializedAsync()
    {
        await LoadReportData(cancelToken.Token);
        await base.OnInitializedAsync();
    }

    private async Task LoadReportData(CancellationToken token)
    {
        IsLoading = true;
        await Task.Delay(500);

        var dataItemCount = 10000;
        var stationCount = 30;
        var rnd = Random.Shared;

        for (int i = 1; i <= dataItemCount; i++)
        {
            var stationNumber = rnd.Next(1, stationCount);
            if (token.IsCancellationRequested) { return; };
            PivotData.Add(new RptContractSalesSummaryModel()
                {
                    Station = $"Station {stationNumber}",
                    ContractMonth = DateTime.Today.AddMonths(-rnd.Next(0, 13)),
                    Rate = rnd.Next(123, 987) * 1.23m,
                    Column1 = $"Column1 {rnd.Next(1, 4)}",
                    Column2 = $"Column2 {rnd.Next(1, 4)}"
                });
        }

        PivotData = PivotData
                        .OrderBy(x => x.Station)
                        .ThenBy(x => x.Year)
                        .ThenBy(x => x.Month).ToList();

        PivotGridRef?.Rebind();

        IsLoading = false;
    }

    public async Task OnRefresh()
    {
        await LoadReportData(cancelToken.Token);
        await Task.CompletedTask;
    }

    public async ValueTask DisposeAsync()
    {
        PivotData = [];
        await Task.CompletedTask;
    }

    public class RptContractSalesSummaryModel
    {
        public DateTime ContractMonth { get; set; }
        public string Station { get; set; } = string.Empty;
        public int Year => ContractMonth.Year;
        public string Month => $"{ContractMonth.Month}-{ContractMonth.ToString("MMMM")}";
        public decimal? Rate { get; set; }
        public string Column1 { get; set; } = string.Empty;
        public int ColumnRate1 { get; set; }
        public string Column2 { get; set; } = string.Empty;
        public int ColumnRate2 { get; set; }
        public string Column3 { get; set; } = string.Empty;
        public int ColumnRate3 { get; set; }
        public string Column4 { get; set; } = string.Empty;
        public int ColumnRate4 { get; set; }    
    } 
}

Unplanned
Last Updated: 23 Jan 2026 14:01 by ADMIN
Created by: Nathan
Comments: 1
Category: Scheduler
Type: Bug Report
1

Normally when you drag an appointment from one grouping to another the grouping id is updated.

This does not occur when trying to drag a recurring appointment to another grouping.

In this case the time will update, but the grouping itself will stay the same.

This can be tested in the scheduler grouping demo (https://demos.telerik.com/blazor-ui/scheduler/grouping)

Steps to reproduce:

1. Create a recurring appointment for one room.

2. Drag one of the appointments to another room.

3. Select "Edit the series".

Result: the appointment is moved to the time it was dropped at, but it is still planned for the same room.

Unplanned
Last Updated: 22 Jan 2026 12:24 by Alex
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.
Unplanned
Last Updated: 22 Jan 2026 12:04 by Stephan

Column headers and column data do not match after reordering. 

See this example: https://blazorrepl.telerik.com/GKkFcwlF54CvZoVp34 

1. Reorder Group 1 and Group 2.

2. The column headers within these 2 groups are not reordered with their parent.

Reordering should work according to the rules specified in the documentation: https://www.telerik.com/blazor-ui/documentation/components/grid/columns/multi-column-headers#reordering

Completed
Last Updated: 22 Jan 2026 09:20 by ADMIN

If the Signature Width or Height parameter values change at runtime, the drawing position no longer matches the cursor position. For example, if the Signature size increases, the drawing position will move down and right, and vice-versa.

A possible workaround is to recreate the component after changing the dimensions:

Signature Width: <TelerikNumericTextBox @bind-Value="@NumValue" Width="120px" />

<TelerikButton OnClick="@ResizeSignature">Resize Signature</TelerikButton>

<br /><br />

@if (ShowSignature)
{
    <TelerikSignature @bind-Value="@SignatureValue"
                      Width="@( $"{SignWidth}px" )"
                      Height="@( $"{SignHeight}px" )"
                      Maximizable="false">
    </TelerikSignature>
}

@code {
    private string SignatureValue { get; set; }

    private int NumValue { get; set; } = 300;

    private int SignWidth { get; set; }
    private int SignHeight { get; set; }

    private bool ShowSignature { get; set; } = true;

    async Task ResizeSignature()
    {
        ShowSignature = false;

        SignWidth = SignHeight = NumValue;

        await Task.Delay(1);

        ShowSignature = true;
    }

    protected override void OnInitialized()
    {
        SignWidth = SignHeight = NumValue;

        base.OnInitialized();
    }
}

Completed
Last Updated: 22 Jan 2026 09:07 by ADMIN

Testing this Select All Checkbox sample in Safari produces a different result compared to other browsers.

Click on the CheckBox in the MultiSelect Header Template closes the popup in Safari. In other browsers (e.g. Chrome, Firefox) the popup remains open after checking the SelectAll CheckBox.

1 2 3 4 5 6