Telerik Forums
Kendo UI for Angular Forum
0 answers
10 views

When header in grid is hidden (either via CSS or via hideHeader property), instead of first cell (first header column cell) getting focus, pressing tab will just skip grid so it is impossible to navigate through grid, toggle groups etc.

https://stackblitz.com/edit/angular-yhtc6xbz-n9c6u4ti?file=src%2Fapp%2Fapp.component.ts

Miljana
Top achievements
Rank 1
Iron
 asked on 27 Apr 2026
1 answer
14 views

This is template code: 

 <kendo-grid
      [data]="gridView"
      [groupable]="true"
      [hideHeader]="true"
    > ... </kendo-grid>

This is code from component: 

export class MyComponent {
  data: any[] = [
    {
      id: crypto.randomUUID(),
      name: 'Emma Thompson',
      group: 'Team A',
    },
    {
      id: crypto.randomUUID(),
      name: 'Oliver Smith',
      group: 'Team B',
    },
    {
      id: crypto.randomUUID(),
      name: 'Anna Brown',
      group: 'Team A',
    },
  ];
  group: GroupDescriptor[] = [{ field: 'group', dir: 'asc' }];

  get gridView() {
    return process(this.data, {
      group: this.group,
    });
  }
}

This is output: 

Question is, how can I customize this label so that it displays text that I want? I have tried setting it programatically, but as soon as I collapse/expand top group, seems like all other groups reset label back to this default one?

Hetali
Telerik team
 answered on 23 Apr 2026
0 answers
11 views

Package / Version:
@progress/kendo-angular-grid v23.2.1 (also reproduced on v23.3.0)
Angular 20.x

Description:

When using a Kendo Grid with scrollable="virtual", [rowHeight]="30", and [data] bound to a GridDataResult, if the user scrolls down (triggering (pageChange) with a non-zero skip), and then the data is replaced programmatically (e.g., by applying a filter that changes the dataset), the grid's virtual scroll container does not reset properly. The result is a large white/empty area above the actual rows — the user must scroll past this empty space to see the data (or the "No records available" message if the filtered result is empty).

Steps to Reproduce:

1. Create a grid with virtual scrolling:

<kendo-grid [data]="gridData" [kendoGridBinding]="filteredData"    scrollable="virtual" [rowHeight]="30" [pageSize]="300"    [skip]="currentSkip" (pageChange)="onPageChange($event)"></kendo-grid>


2.Load the grid with enough data to enable scrolling (e.g., 1000+ rows).

3.Scroll down significantly so the grid fires (pageChange) with a skip value > 0 (e.g., skip=300+).

This causes the grid's internal virtual scroller to:

Set translateY(Npx) on the grid table element to offset the visible rows
Set .k-height-container > div height to total * rowHeight
4.Now programmatically change the bound data to a much smaller or empty dataset:


this.filteredData = this.allData.filter(item => item.driverId === selectedDriverId);

this.gridData = {

data: this.filteredData.slice(0, this.pageSize),

total: this.filteredData.length

};

5.Expected: The grid resets to the top and displays the filtered rows immediately, with the virtual scroll container sized correctly for the new total.

6.Actual: The grid retains the old translateY offset and .k-height-container height from before the filter. This produces a large empty white/blue area at the top of the grid. The actual rows (or "No records available") are pushed far below the visible viewport. The user must scroll down through the empty space to find them.

Root Cause Analysis:

The grid's ListComponent.resetVirtualScroll(newTotal) method correctly resets translateY, scrollTop, and recreates the RowHeightService. However, this method is only called from the grid's ngOnChanges when both conditions are met:

this.skip === 0
this.isVirtualScrollOutOfSync() returns true (i.e., virtualSkip > 0 or tableTransformOffset > 0)
The problem is that ngOnChanges checks this.skip === 0, but the grid's internal skip (managed by the virtual scroller) may not match the value passed through [skip] binding until after change detection. When data changes and [skip] is set to 0 simultaneously, the grid's internal skip may still hold the old value at the time ngOnChanges runs, so resetVirtualScroll is never called.

Additionally, the kendoGridBinding directive's rebind() path does call resetVirtualScroll, but it appears to have a timing issue in v23 where the internal scroller state (translateY, height container) is not fully synchronized when the data reference changes without the directive detecting a meaningful change.

This worked correctly in Kendo Angular Grid v20.x — downgrading to v20 resolves the issue entirely, confirming this is a regression in v23.

Workaround:

We manually reset the virtual scroll DOM after programmatically changing the data:


  

private resetGridVirtualScroll(): void { 

try { const gridEl: HTMLElement = this.myGrid.ariaRoot.nativeElement; // Reset scroll position const content = gridEl.querySelector('.k-grid-content'); if (content) {

content.scrollTop = 0;

} // Reset the table translateY that virtual scroll sets

const table = gridEl.querySelector('.k-grid-content table, .k-grid-content .k-grid-table-wrap'); if (table instanceofHTMLElement) { table.style.transform = 'translateY(0px)'; } // Reset the height container to match new total

const heightDiv = gridEl.querySelector('.k-height-container > div') asHTMLElement; if (heightDiv) { const total = this.filteredData?.length || 0; heightDiv.style.height = (total * this.rowHeight) + 'px'; } } catch (e) { }

}

Called after updating the data and skip:

applyFilter() {   

this.skip = 0; 

  this.filterData(); 

  this.loadGridData();   

this.resetGridVirtualScroll();

}

We also had to fix loadData() to handle empty datasets — when FilteredData is empty, gridData must be set to { data: [], total: 0 }, otherwise the grid retains the old total and the virtual container keeps its large height.

Expected Fix:

The grid should automatically call resetVirtualScroll() whenever [data] changes with a new (different) total value and the virtual scroller is out of sync — regardless of the current internal skip state. The ngOnChanges guard this.skip === 0 should either be removed or should check the incoming skip binding value rather than the stale internal state.

Waseem
Top achievements
Rank 1
 asked on 23 Apr 2026
1 answer
29 views

Here is an article I wrote, and I would appreciate your feedback

Bridging the gap: Angular Signals + Kendo UI Grid. 🔄
I’m sharing my journey on refactoring enterprise apps using rxResource, withPreviousValue, and a custom directive for a glitch-free, high-performance UI.

https://medium.com/we-code/kendo-angular-grid-meets-signals-25537c901cdf

 

Thanks.

Diego

 

Martin Bechev
Telerik team
 answered on 16 Apr 2026
1 answer
33 views

Hello,

I'm trying to get a custom column menu item list using the Angular Grid to work, but it does not seem to be accessible through the keyboard.

See following Stackblitz for a reproduction example: https://stackblitz.com/edit/angular-tzm2tpqt?file=src%2Fapp%2Fapp.component.ts

I navigated to a header column using tab to focus the grid and the arrow keys to select a specific header column, then pressed ALT + Arrow Down to open the column menu. The column menu opens as expected, but the initial menu item is not focussed and I cannot access the menu items using the keyboard. Instead, the grid is still focussed.

Any advice on what might be wrong in this example would very much be appreciated.

Martin Bechev
Telerik team
 answered on 16 Mar 2026
1 answer
41 views

I have a grid where row height and detail row height are set correctly (i think) and virtual scrolling is turned on.  when I expand a row to show the detail view, as soon is i try to interact with the detail view (It has a tabstrip in it) it will jump that row to the top of the gird view.  It's pretty jarring.  ONLY when the detail component is at the top of the grid view will it let me interact with the detail view.  Not sure if i'm doing something wrong or there's a bug.

i attached a zipped mp4 of the behavior.

Martin Bechev
Telerik team
 answered on 30 Jan 2026
1 answer
48 views

Tengo algo como esto dentro de un kendo grid , en el toolbar yo necesito tener un input que me servira de buscador para mi grid y al lado quiero  kendoGridAIAssistantTool , hacia la derecha quiero 2 botones importar excel y pdf , la pregunta es porque no aparece mi input? cuando utilizo kendo toolbar  , ademas que quiero usar comandos de generar PDF Y Excel del grid pero solo puedo con kendoGridToolbarTemplate deberia poder usarlo tambien con kendo-toolbar , ya que kendoGridToolbarTemplate y kendo-toolbar no se puede usar a la misma vez  , deberian arreglar eso

 

 <kendo-toolbar>

 

   <kendo-textbox
      style="width: 200px"
      placeholder="Buscar..."
      (valueChange)="onFilterChange($event)">
    </kendo-textbox>

 

<kendo-toolbar-button

kendoGridAIAssistantTool requestUrl="https://demos.telerik.com/service/v2/ai/grid/smart-state"

[keepOutputHistory]="true"

[aiPromptSettings]="aiPromptSettings"

[aiWindowSettings]="aiWindowSettings">

</kendo-toolbar-button>

 

    <button kendoGridExcelCommand>
      Exportar Excel
    </button>

    <button kendoGridPDFCommand>
      Exportar PDF
    </button>

 

 </kendo-toolbar>

 
Zornitsa
Telerik team
 answered on 28 Jan 2026
1 answer
147 views

Hi,

I'm experiencing an issue with the Kendo Grid Context Menu, when cellRowspan is active.

Reproduction:

It seems like the wrong column is being calculated when rowspan is active.

I'm on the latest Kendo version (v21.3.0).

Is this a known issue?

Thanks in advance!

 

Yanmario
Telerik team
 answered on 08 Jan 2026
1 answer
108 views

Hi,

I've implemented a <kendo-grid-column-group> in my Grid and discovered this lead to warnings being plotted into the browser developer console:

You can easily verify this by the official example:

https://www.telerik.com/kendo-angular-ui/components/grid/columns/headers

-> Edit in -> Stackblitz -> Open Console

 

I'm working with the latest Kendo version 21.2.0 and ng 21.0.2.

Is this a known issue? Thanks in advance!

Yanmario
Telerik team
 answered on 10 Dec 2025
1 answer
72 views

kendo 19.3.0, angular 19.2.17. 

applying kendoGridToolbarFocusable to kendo-dropdownlist gives it the correct behavior to stay focused on click but this same behavior did not work for kendo-multiselect. it stays open so long as the click is held in but once released it closes. if the mouse is hovered over the dropdown that opens AND THEN released, the multiselect stays open and has intended behavior after selecting items.

kendoGridFocusable was also tried in this scenario and did not produce results.

<ng-template kendoGridToolbarTemplate>

<kendo-dropdownlist style="min-width:220px; margin-right:5px; margin-left:5px"
kendoGridToolbarFocusable
[data]="names"
(valueChange)="handleApplyAllValueChange()"
[defaultItem]="defaultApplyAllItem"
[textField]="'nm'"
[valueField]="'id'"
[(ngModel)]="applyAllItem"
[hidden]="isRevisedRadioButton()">
</kendo-dropdownlist>
<kendo-multiselect style="min-width:220px; max-width:220px; max-height: 140px; overflow-y: auto"
kendoGridToolbarFocusable
[data]="applyAllSecondaryList"
[textField]="'nm'"
[valueField]="'id'"
[disabled]="isApplyAllSecondaryDisabled()"
[autoClose]="false"
[(ngModel)]="applyAllSecondaryItem"
[placeholder]="'Select Secondary'"
[hidden]="isRevisedRadioButton()">
<ng-template kendoMultiSelectTagTemplate let-dataItem kendoGridToolbarFocusable>
{{ dataItem.deviationNm }}
</ng-template>
</kendo-multiselect>

</ng-template>
Martin Bechev
Telerik team
 answered on 08 Dec 2025
Narrow your results
Selected tags
Tags
+? more
Top users last month
Boardy
Top achievements
Rank 2
Veteran
Iron
Benjamin
Top achievements
Rank 3
Bronze
Iron
Veteran
ivory
Top achievements
Rank 1
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
ClausDC
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Boardy
Top achievements
Rank 2
Veteran
Iron
Benjamin
Top achievements
Rank 3
Bronze
Iron
Veteran
ivory
Top achievements
Rank 1
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
ClausDC
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?