Is it possible to do this?
I see I can customise individual items, but they would need to be in a Sortable container in order for drag / drop to work. Is there any way of achieving this?
Thanks
Hi,
I'm using kendo-grid
in Angular with both resizable columns and virtual scrolling enabled.
I also call the autoFitColumns()
method (through ViewChild
) to auto-adjust the column widths based on the content.
However, I noticed the following problematic behavior:
My grid uses pageSize = 60
, so only 60 rows are rendered in the DOM at a time.
I have a total of about 101 rows.
The content in row #101 is much wider than any of the rows currently rendered.
When I call autoFitColumns()
, the method calculates the width based only on the visible (rendered) rows (the first 60).
As a result, when I scroll down to row 101, the cell shows ellipsis (...
) because the column width didn't get adjusted based on its content.
It seems that autoFitColumns()
does not take into account rows that aren't currently rendered due to virtual scrolling.
Expected behavior:
Ideally, autoFitColumns()
should consider the ENTIRE dataset, or at least provide an option to temporarily render all rows, so the width is calculated correctly.
I'll attach a sample StackBlitz with:
101 records
Virtual scrolling + resizable = true
Last row has a long text
After calling autoFitColumns
, the column is not wide enough and shows "..."
Could you please confirm if this is expected behavior or if there's a recommended workaround?
https://stackblitz.com/edit/angular-8rzs1wr6-7hvlbi8f?file=src%2Fapp%2Fapp.component.ts,src%2Fapp%2Fproducts.ts
Thanks in advance!
Hi Team,
Originally we have implemented the client side filter using the Date Range for date column. Now the requirement got changed and we need to fetch it from server. But the problem is API call returns the data based on start and end date selected but the UI is not rendering the same. UI is rendering the data if we select only the start date.
We have implemented the date range filter by referring this page https://www.telerik.com/kendo-angular-ui/components/grid/filtering/filter-row#using-daterange. Can you please help to render the data by ignoring the client side filter. we are using the CompositeFilterDescriptor for filter the kendo grid data from server. still the client side filter is working for text/string filter but rendering the final data returned by API.
import { Component, Input } from "@angular/core";
import {
BaseFilterCellComponent,
FilterService,
} from "@progress/kendo-angular-grid";
import { FilterDescriptor } from "@progress/kendo-data-query";
import { SVGIcon, xIcon } from "@progress/kendo-svg-icons";
/**
* NOTE: Interface declaration here is for demo compilation purposes only!
* In the usual case include it as an import from the data query package:
*/
import { CompositeFilterDescriptor } from '@progress/kendo-data-query';
@Component({
selector: "date-range-filter-cell",
styles: [
`
kendo-daterange > kendo-dateinput.range-filter {
display: inline-block;
}
.k-button {
margin-left: 5px;
}
`,
],
template: `
<kendo-daterange>
<kendo-dateinput
class="range-filter"
kendoDateRangeStartInput
[value]="start"
(valueChange)="filterRange($event, end)"
style="width:120px"
>
</kendo-dateinput>
-
<kendo-dateinput
class="range-filter"
kendoDateRangeEndInput
[value]="end"
(valueChange)="filterRange(start, $event)"
style="width:120px"
>
</kendo-dateinput><button
kendoButton
[svgIcon]="xIcon"
title="Clear"
(click)="clearFilter()"
></button>
</kendo-daterange>
`,
})
export class DateRangeFilterCellComponent extends BaseFilterCellComponent {
// @Input() public filter: CompositeFilterDescriptor;
@Input()
public field: string;
public xIcon: SVGIcon = xIcon;
// constructor(filterService: FilterService) {
// super(filterService);
// }
public get start(): Date {
const first = this.findByOperator("gte");
return (first || <FilterDescriptor>{}).value;
}
public get end(): Date {
const end = this.findByOperator("lte");
return (end || <FilterDescriptor>{}).value;
}
// public get hasFilter(): boolean {
// return this.filtersByField(this.field).length > 0;
// }
public clearFilter(): void {
this.filterService.filter(this.removeFilter(this.field));
}
public filterRange(start: Date, end: Date): void {
this.filter = this.removeFilter(this.field);
const filters = [];
if (start) {
filters.push({
field: this.field,
operator: "gte",
value: start,
});
}
if (end) {
let enddate = new Date(end);
filters.push({
field: this.field,
operator: "lte",
value: end.setDate(enddate.getDate() + 1),
});
}
const root = this.filter || {
logic: "and",
filters: [],
};
if (filters.length) {
root.filters.push(...filters);
}
this.filterService.filter(root);
}
private findByOperator(op: string): FilterDescriptor {
return this.filtersByField(this.field).filter(
({ operator }) => operator === op
)[0];
}
}
Our web application uses Kendo Angular Date Picker. And we are creating testcases on our web with a tool called Playwright from Microsoft. This tool mimics human interaction with the web. And on any form input control regardless of type, this fill() is used. For example:
; ----> this code will set the date input value to 2025 august 21st. But on kendo angular date picker, the resulting code is this:
Which will not bulletproof the testcase for future runs, as it does not contain the whole date including its year.
My question is can this component function just like native date input in this regard?
Hello,
I have a dropdownlist that I just cannot select anything out of. Here's my code:
If you look at the changeParentalControl there's a debugger inside that doesn't get hit.
HTML:
<kendo-dropdownlist
[data]="getParentalControlLevels()"
[textField]="'description'"
[valueField]="'name'"
[value]="getParentalControlLevelDisplay(itemPropertyEdit[1])"
(valueChange)="changeParentalControl($event)"
/>
TS:
interface ParentalControlLevelDisplay {
id: number;
description: string;
name: string;
}
getParentalControlLevels(): ParentalControlLevelDisplay[] {
if (this.assignments.length <= 1) return [];
return [
{id: 0, name: '', description: 'Adults, Teens, Kids'},
{id: 1, name: 'teens', description: 'Adults, Teens'},
{id: 2, name: 'adults', description: 'Adults'},
];
}
getParentalControlLevelDisplay(name: any): ParentalControlLevelDisplay | undefined {
let itemParentalControlTypes: ParentalControlLevelDisplay[] = [
{id: 0, name: '', description: 'Adults, Teens, Kids'},
{id: 1, name: 'teens', description: 'Adults, Teens'},
{id: 2, name: 'adults', description: 'Adults'},
];
let found = itemParentalControlTypes.find((t) => t.name == name);
return (found === undefined) ? undefined : found;
}
itemPropertyEdit: [string, string] = ['itemParentalControlLevel', 'adults'];
public changeParentalControl(event: any) {
debugger; // <--- this doesn't get hit!
this.itemPropertyEdit = event;
}
I've a kendo chart where I'm returning an image as a marker for my angular application. Is there any option to add a tooltip for that image.
sample image code is
Hi,
I have a <kendo-splitter> inside a <kendo-expansionpanel>. During the accessibility evaluation using keyboard, I was not able to tab into the left pane, the focus goes into the right pane directly bypassing the left pane. Any fix for that? Thanks.
Hi there,
When [locked] is set in grid column, the kendoGridDetailTemplate will be broken. Noticed this issue after recent kendo version upgrade to 18.
Two expand + button will show in the locked columns and not locked columns and both buttons not working to expand.
Thanks.
When I set the upload method and prevent defaults, the other options didn't work. But I just want to override the upload method; the other properties should work as usual.
I can't use the default Upload Component post option because it causes CORS errors.
How can I override the upload method for the Upload component for Angular?