09 Feb to 16 Feb 2026: highlights of the new online resources that we published last week.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/data-management/grid/smart-grid
Summary: Learn how to enable and configure Smart Grid mode in the Telerik UI for ASP.NET Core Grid (HTML Helpers) to auto-generate columns, titles, formats, editors, and validation from your strongly typed model and data annotations. The article covers prerequisites, setup, and supported features (data binding, paging, sorting, filtering, editing), and shows how to override or extend the generated configuration with custom columns, templates, command buttons, and editor widgets when you need finer control.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/conversational-ui/promptbox/modes
Summary: Learn which PromptBox modes are available in Telerik UI for ASP.NET Core Conversational UI and how each mode affects rendering and user interaction. You’ll see how to set the Mode option in the ASP.NET Core HTML Helper configuration and choose the right mode for your scenario, with code examples and notes on behavior differences.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/conversational-ui/promptbox/tools
Summary: Learn how to configure the PromptBox tools in Telerik UI for ASP.NET Core (HTML Helper, Conversational UI): enable built-in tools (for example, Send/Submit and Clear) and add custom tools. You’ll see how to declare tools via the Tools configuration in Razor, set icons and placement, handle tool click events, and wire tool actions into prompt submission and your application logic.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/conversational-ui/promptbox/events
Summary: This article documents the client-side events of the Conversational UI PromptBox in Telerik UI for ASP.NET Core (HTML Helper) and shows how to wire JavaScript handlers via the .Events(...) configuration. It covers open/close lifecycle hooks, button click and value-change events, and the event arguments you can use to read the input value and selected action so you can implement validation, logging, and custom workflows.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/navigation/smartpastebutton/events
Summary: This article describes the client-side events of the SmartPasteButton in Telerik UI for ASP.NET Core and how to subscribe to them via HTML Helpers or Tag Helpers with JavaScript handlers. You learn when paste-related events fire, what the event arguments contain, and how to cancel the default behavior or handle errors so you can intercept clipboard input, validate it, and integrate the paste flow into your app logic.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/conversational-ui/promptbox/disabled
Summary: Learn how to disable the PromptBox in Telerik UI for ASP.NET Core Conversational UI to block user input and focus when required. Set the disabled state at initialization with the HTML Helper using .Enable(false) or with the Tag Helper using enabled="false", and toggle it at runtime via the client-side widget.enable(true|false) API. Use this to prevent input during async operations or when rendering a read-only state.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/conversational-ui/promptbox/overview
Summary: Learn how to use the ASP.NET Core Conversational UI PromptBox to capture free‑form text input and control it via the server-side HTML Helper or Tag Helper. The article covers initialization, configuring options like placeholder, value, and size, and wiring up submit/change events and API methods to read the entered text and integrate it into your chat or form workflows.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/navigation/smartpastebutton/overview
Summary: The SmartPasteButton in Telerik UI for ASP.NET Core is a split-button style component that exposes a primary Paste action with a dropdown of paste modes (for example, keep formatting or paste as plain text). Add it with the HTML or Tag Helper, configure items, icons, and appearance, and wire up client-side events to read from the Clipboard API and apply your paste logic to target elements. It follows the suite’s button behaviors, including keyboard navigation and accessibility.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/conversational-ui/promptbox/adornments
Summary: Learn how to add input adornments (prefix and suffix) to the ASP.NET Core PromptBox so you can display icons or text inside the field. The article shows how to configure prefix/suffix options with the HtmlHelper and TagHelper APIs in Razor, including using built-in icons, plain text, and custom templates, and how to combine multiple adornments to fit your UI.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/conversational-ui/promptbox/appearance
Summary: This article shows you how to customize the appearance of the Telerik UI for ASP.NET Core PromptBox (built on the Dialog), including controlling dimensions and layout (such as width, titlebar, and action buttons) and applying theming through the Kendo Sass-based themes. It details the rendered HTML/CSS structure (for example, k-dialog/k-prompt and titlebar/actions sections) so you can target selectors, and explains how to use ThemeBuilder or override theme variables and styles for maintainable, app-specific customization.
---------------------------------------------------------------------------------------------------------------------------------------------------------
02 Feb to 09 Feb 2026: highlights of the new online resources that we published last week.
Article: https://www.telerik.com/aspnet-core-ui/documentation/ai/troubleshooting
Summary: Use this troubleshooting guide to diagnose and fix issues when integrating the Telerik UI for ASP.NET Core AI Prompt with OpenAI or Azure OpenAI. It walks you through verifying server-side configuration (API keys, endpoints, deployment/model names, api-version), setting up a backend proxy to avoid CORS, and resolving common HTTP errors (401/404/429), timeouts, and request/response size limits.
Blog: https://www.telerik.com/blogs/building-rag-aspnet-core
Summary: Learn how to implement Retrieval-Augmented Generation (RAG) in ASP.NET Core with C#: ingest and chunk documents, generate embeddings, store them in a vector database, and retrieve top‑k context for queries. You’ll wire the results into an LLM call (OpenAI/Azure OpenAI) and expose HTTP endpoints that return grounded answers, using configuration and dependency‑injection patterns you can reuse in your .NET apps.
---------------------------------------------------------------------------------------------------------------------------------------------------------
29 Jan to 05 Feb 2026: highlights of the new online resources that we published last week.
Blog: https://www.telerik.com/blogs/building-rag-aspnet-core
Summary: Learn how to implement a Retrieval-Augmented Generation (RAG) pipeline in ASP.NET Core with C#: ingest and chunk documents, generate embeddings via OpenAI or Azure OpenAI, store them in a vector database, run similarity search, and feed retrieved context to an LLM to answer user prompts. The article provides end-to-end C# code for services and controllers, dependency injection and configuration of API keys, and a minimal chat interface so you can run a local RAG Web API and UI.
---------------------------------------------------------------------------------------------------------------------------------------------------------
19 Jan to 26 Jan 2026: highlights of the new online resources that we published last week.
Article: https://www.telerik.com/aspnet-core-ui/documentation/knowledge-base/grid-use-grid-as-client-template
Summary: Learn how to render a Kendo UI Grid inside a Telerik UI for ASP.NET Core Grid column using a ClientTemplate: output a per-row placeholder with a unique id (for example, via kendo.guid()) and initialize the child grid in the parent grid’s dataBound handler using the current row’s data. The article shows how to pass the row key to the child grid’s DataSource, prevent duplicate initialization, and dispose nested grids on rebind to avoid memory leaks.
Article: https://www.telerik.com/aspnet-core-ui/documentation/knowledge-base/tooltip-refresh-with-dynamic-content
Summary: To keep a Kendo UI Tooltip for ASP.NET Core in sync with dynamic content and targets (after AJAX/partial updates or data-bound component renders), initialize it on a stable container and use the filter option with a content callback, or update the content via setOptions in the show event. The article shows how to attach the tooltip to newly added elements and render up-to-date content without re-initialization, plus when to destroy and re-initialize as a fallback in Grid/list or SPA scenarios.
Blog: https://www.telerik.com/blogs/getting-the-right-row-on-the-screen-in-the-kendo-grid
Summary: Learn how to programmatically bring a specific row into view in the Kendo UI Grid and optionally select it, even when paging, sorting, filtering, or virtual scrolling is enabled. The article shows how to resolve a data item to its correct DOM row via the item’s uid (e.g., grid.tbody.find("tr[data-uid='...']")) and then scroll the grid’s content to that row (scrollTop or scrollIntoView), with guidance on triggering the logic at the right time using dataBound.
---------------------------------------------------------------------------------------------------------------------------------------------------------
12 Jan to 19 Jan 2026: highlights of the new online resources that we published last week.
Blog: https://www.telerik.com/blogs/building-resilient-apis-retry-pattern
Summary: You’ll learn how to implement the retry pattern for API clients and services—when to retry transient failures and when to fail fast. The article provides .NET examples using HttpClientFactory and Polly to apply bounded retries with exponential backoff and jitter, target idempotent operations, and handle retryable HTTP status codes (408, 429, 500, 502, 503, 504), with practical guidance on timeouts, cancellation tokens, and telemetry.
---------------------------------------------------------------------------------------------------------------------------------------------------------
05 Jan to 12 Jan 2026: highlights of the new online resources that we published last week.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/diagrams-and-maps/map/azure-tiles
Summary: Learn how to render Azure Maps tiles in the Telerik UI for ASP.NET Core Map by adding a tile layer with the Azure Maps Tile API URL template. You configure the layer’s UrlTemplate with {zoom}/{x}/{y}, provide your Azure Maps subscription key and the tilesetId (for example microsoft.base.road or microsoft.imagery), and set the required attribution. The article uses the Map HTML Helper and TileSource options to control tile size, zoom levels, and other layer settings.
---------------------------------------------------------------------------------------------------------------------------------------------------------
29 Dec to 05 Jan 2026: highlights of the new online resources that we published last week.
Blog: https://www.telerik.com/blogs/whats-new-apis-net-10-real-improvements
Summary: This article breaks down what's new in .NET 10 APIs, focusing on practical Base Class Library improvements you can apply immediately. It covers updates across collections, spans/UTF-8, I/O and networking, date/time, cryptography, diagnostics, and threading, with concise examples and notes on performance, memory, and reliability. Use it to plan adoption in existing projects by mapping old patterns to new overloads and helpers that reduce allocations and simplify async and data processing.
---------------------------------------------------------------------------------------------------------------------------------------------------------
22 Dec to 29 Dec 2025: highlights of the new online resources that we published last week.
Blog: https://www.telerik.com/blogs/whats-new-net-10-aspnet-core
Summary: This article walks you through what’s new in ASP.NET Core for .NET 10 and how to adopt the changes, with focused code examples and notes on breaking changes to help you plan upgrades. It covers updates across hosting and Kestrel, routing and minimal APIs, Blazor, authentication/authorization and security, caching and performance, and provides practical migration guidance for moving to .NET 10.
---------------------------------------------------------------------------------------------------------------------------------------------------------
15 Dec to 22 Dec 2025: highlights of the new online resources that we published last week.
Article: https://www.telerik.com/aspnet-core-ui/documentation/knowledge-base/grid-ai-integration
Summary: Learn how to add AI integration to the Telerik UI for ASP.NET Core Grid by invoking OpenAI or Azure OpenAI to analyze grid data and display the response in a dialog. You will add a custom toolbar command, collect selected rows and column metadata on the client, call an ASP.NET Core controller that wraps the OpenAI REST API, and render the result in the UI. The article covers configuring OpenAI/Azure OpenAI, prompt construction, server-side API key handling, and basic error handling.
Article: https://www.telerik.com/aspnet-core-ui/documentation/knowledge-base/chart-ai-integration
Summary: Implement AI-assisted analysis for the Telerik/Kendo UI for ASP.NET Core Chart by extracting series data, sending it to an AI provider (e.g., OpenAI or Azure OpenAI) from a secure server-side controller, and rendering the generated summary in a UI element (such as a Dialog). The article provides Razor and controller examples using HttpClient and environment-stored API keys, plus guidance on prompt design, minimizing shared data, and keeping keys off the client.
Article: https://www.telerik.com/aspnet-core-ui/documentation/knowledge-base/editor-ai-integration
Summary: Learn how to integrate OpenAI or Azure OpenAI with the Telerik UI for ASP.NET Core Editor by adding a custom toolbar menu that posts the current content and selected action to a server-side ASP.NET Core endpoint, then inserts or replaces the text with the AI response. The article provides Editor configuration, JavaScript, and controller code that calls the Chat Completions API with prompt templates for rewrite, summarize, translate, and grammar fixes, keeping the API key on the server.
Article: https://www.telerik.com/aspnet-core-ui/documentation/knowledge-base/scheduler-ai-integration
Summary: Learn how to integrate the Telerik UI for ASP.NET Core Scheduler with an LLM-backed AI workflow to create, edit, translate, or summarize events from natural language. You’ll add the Kendo AI Prompt to the Scheduler UI, handle its execute event on the client, and implement a C# endpoint that calls an LLM (e.g., OpenAI or Azure OpenAI) and maps the JSON response to Scheduler events. The article includes end-to-end wiring, request/response shaping, and safe parsing to update the Scheduler data source.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/data-management/grid/smart-grid/smart-extensions
Summary: This article explains how to use Smart Extensions for the Telerik UI for ASP.NET Core Grid (Smart Grid) to apply preset configuration through extension methods on the Grid HtmlHelper. It covers setup (package and namespace), the available extensions and what they enable (such as filtering, sorting, paging, toolbars, commands, and column configuration), and how to customize or override defaults when composing Smart extensions with your own Grid settings.
Blog: https://www.telerik.com/blogs/managing-content-security-telerik-aspnet-core-applications
Summary: This article shows you how to add and enforce a Content Security Policy (CSP) in ASP.NET Core applications that use Telerik UI for ASP.NET Core, including setting security headers via middleware. It details the CSP directives and allowances required by the components—script-src, style-src, img-src, font-src, connect-src, worker-src, and support for blob: and data: URLs for features like file export—and how to use nonces/hashes and CSP‑compatible Telerik/Kendo assets to avoid 'unsafe-inline' and 'unsafe-eval'. You also get copy‑paste policy examples and troubleshooting guidance for scenarios such as CDN-hosted resources, PDF/Excel export, and WebSocket/SignalR connections.
---------------------------------------------------------------------------------------------------------------------------------------------------------
24 Nov to 01 Dec 2025: highlights of the new online resources that we published last week.
Blog: https://www.telerik.com/blogs/securing-apps-telerik-ui-aspnet-core-otp-control
Summary: You’ll implement one-time passcode (OTP/TOTP) verification in an ASP.NET Core app using the Telerik UI for ASP.NET Core OTP control, from configuring the control in Razor views to wiring server-side validation with ASP.NET Core Identity or a TOTP library. The article covers UX and security details—auto-advancing digit inputs, paste and accessibility, handling expiration and retries, and enforcing server-only validation, rate limiting, and secure secret storage—to build a reliable multi-factor authentication flow.
---------------------------------------------------------------------------------------------------------------------------------------------------------
17 Nov to 24 Nov 2025: highlights of the new online resources that we published last week.
Article: https://www.telerik.com/aspnet-core-ui/documentation/knowledge-base/chat-ai-integration
Summary: Integrate the Telerik UI for ASP.NET Core Chat with OpenAI or Azure OpenAI by handling the Chat send event, forwarding user messages to a server-side controller that calls the Chat Completions API, and returning the assistant’s reply as a Chat message. The article walks you through the Razor setup, controller/action implementation, secure API key handling, request/response models, role mapping (user/assistant), and basic error handling.
Blog: https://www.telerik.com/blogs/real-time-data-updates-telerik-ui-net-maui-grid
Summary: Learn how to implement real-time data updates in the Telerik UI for .NET MAUI Grid by binding to an ObservableCollection and models that implement INotifyPropertyChanged, so item additions/removals and per-cell changes propagate instantly. The article shows a timer-driven update loop and how to marshal background changes onto the UI thread, with practical guidance to keep frequent updates responsive.
---------------------------------------------------------------------------------------------------------------------------------------------------------
10 Nov to 17 Nov 2025: highlights of the new online resources that we published last week.
Article: https://www.telerik.com/aspnet-core-ui/documentation/ai-components-and-features
Summary: This article documents the AI Prompt and AI Chat components in Telerik UI for ASP.NET Core and shows you how to configure Tag/HTML Helpers and connect them to OpenAI or Azure OpenAI through ASP.NET Core endpoints. It covers setup, provider configuration, client/server APIs, streaming responses, attachments, context and message history, and content safety basics to help you implement AI features in your application.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/diagrams-and-maps/diagram/binding
Summary: You will bind the Telerik ASP.NET Core Diagram HTML Helper to your data so shapes and connections are generated from your schema. Configure DataSource and ConnectionsDataSource with model field mappings (Id, Text, X/Y for shape position; From/To for connections) and transport actions for server-side CRUD. The examples show remote binding, positioning, and handling data-bound events.
Article: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/diagrams-and-maps/diagram/razor-pages
Summary: This article shows how to use the ASP.NET Core Diagram HtmlHelper in Razor Pages: configure separate DataSources for shapes and connections with AJAX transport to page handlers (via Url.Page), map model fields (Id, From, To), and include the required Kendo UI scripts and styles. It provides .cshtml and PageModel code for Read, Create, Update, and Destroy operations and demonstrates adding anti-forgery tokens to the requests.
Feel free to check them out and share your thoughts!
The Telerik Team
1. Is it hard to understand the version numbers of our releases? If yes, what makes them hard to understand them?
2. Would semantic versioning (SemVer) of our releases make it easier to understand our version numbers and what's behind them?
3. If we go with SemVer, we might need to start with version 3000.0.0 as we currently use 2022.x.x. Please share your thoughts about this approach and ideas for what number versioning would work best for you.
Hi!
The ListView is breaking my web application, and I cannot make head or tail of the reason:
Kendo.Mvc.UI.ListView<T>.VerifySettings()
Also, you demos for the ListView are broken and the browser tab crashed after a while.
I need an urgent fix, as this is affecting the live application.

In our UI for ASP.NET Core R3 2020 (2020.3.915) release, the Column menu message of unsticking a column is "null".
This bug will be resolved in our next official release.
In the meantime, as a workaround, manually set the Unstick Column menu message:
.ColumnMenu(c => c.Messages(m => m.Unstick("Unstick Column")))I have a NET core app and calling an external API fropm another site which returns anJSON that looks like this
[
{
"powerDeviceName": "Datarack",
"powerDeviceUnitName": "Datarack Fas 1",
"color": "red",
"dateInfo": "2026-01-01T00:00:00",
"consumption": "44.35"
},
{
"powerDeviceName": "Datarack",
"powerDeviceUnitName": "Datarack Fas 1",
"color": "red",
"dateInfo": "2026-01-02T00:00:00",
"consumption": "44.38"
},
{
"powerDeviceName": "Datarack",
"powerDeviceUnitName": "Datarack Fas 1",
"color": "red",
"dateInfo": "2026-01-03T00:00:00",
"consumption": "44.38"
},
{
"powerDeviceName": "Datarack",
"powerDeviceUnitName": "Datarack Fas 2",
"color": "blue",
"dateInfo": "2026-01-01T00:00:00",
"consumption": "291.59"
},
{
"powerDeviceName": "Datarack",
"powerDeviceUnitName": "Datarack Fas 2",
"color": "blue",
"dateInfo": "2026-01-02T00:00:00",
"consumption": "293.00"
},
{
"powerDeviceName": "Datarack",
"powerDeviceUnitName": "Datarack Fas 2",
"color": "blue",
"dateInfo": "2026-01-03T00:00:00",
"consumption": "289.21"
},
{
"powerDeviceName": "Datarack",
"powerDeviceUnitName": "Datarack Fas 3",
"color": "yellow",
"dateInfo": "2026-01-01T00:00:00",
"consumption": "228.62"
},
{
"powerDeviceName": "Datarack",
"powerDeviceUnitName": "Datarack Fas 3",
"color": "yellow",
"dateInfo": "2026-01-02T00:00:00",
"consumption": "577.15"
},
{
"powerDeviceName": "Datarack",
"powerDeviceUnitName": "Datarack Fas 3",
"color": "yellow",
"dateInfo": "2026-01-03T00:00:00",
"consumption": "295.35"
}
]From this I want to create a chart with series that matches the "powerDeviceUnitName" values (with the color from JSON) and the axis will list all dates in dateInfo The "value" for the chart is "consumption"
I didn't thought this should be any hard issue, but I can't find any example on Teleriks demos that have external JSON?
Anyone that can help me in the right direction?
Regards Pelle
When adding a PDFViewer component, I get this error:
jQuery.Deferred exception: mI is not a function TypeError: mI is not a function
at DV.loadDocument (http://localhost:56126/lib/kendo-ui/js/kendo.all.min.js:9:4666164)
at DV.loadFile (http://localhost:56126/lib/kendo-ui/js/kendo.all.min.js:9:4666007)
at new DV (http://localhost:56126/lib/kendo-ui/js/kendo.all.min.js:9:4660492)
at init._loadPdfJSDocument (http://localhost:56126/lib/kendo-ui/js/kendo.all.min.js:9:4725966)
at new init (http://localhost:56126/lib/kendo-ui/js/kendo.all.min.js:9:4710755)
at HTMLDivElement.<anonymous> (http://localhost:56126/lib/kendo-ui/js/kendo.all.min.js:9:66968)
at ce.each (http://localhost:56126/js/jquery-3.7.0.min.js:2:3129)
at ce.fn.init.each (http://localhost:56126/js/jquery-3.7.0.min.js:2:1594)
at e.fn.<computed> [as kendoPDFViewer] (http://localhost:56126/lib/kendo-ui/js/kendo.all.min.js:9:66944)
at HTMLDocument.<anonymous> (http://localhost:56126/MyFolder/MyPage?ticketid=11:703:100) undefined
Unable to find package Telerik.UI.for.AspNet.Core with version (>= 2021.3.1109)
- Found 1 version(s) in nuget.org [ Nearest version: 2016.3.914 ]
- Found 0 version(s) in Microsoft Visual Studio Offline Packages
Duplicate 'Content' items were included. The .NET SDK includes 'Content' items from your project directory by default. You can either remove these items from your project file, or set the 'EnableDefaultContentItems' property to 'false' if you want to explicitly include them in your project file. For more information, see https://aka.ms/sdkimplicititems. The duplicate items were: 'nlog.config'

Good afternoon,
Using the demo https://demos.telerik.com/aspnet-core/grid/custom-command edited in REPL I have added some extra columns and grouping, plus a custom command whose visibility is conditional.
When I make the grid scrollable and contained in a div whose class is "container" the custom command column is hidden at runtime.
Index.html:
<div class="container">
@(Html.Kendo().Grid<Kendo.Mvc.Examples.Models.EmployeeViewModel>()
.Name("Grid")
.Columns(columns => {
columns.Command(command => command.Custom("Close").Click("showDetails").Visible("colVisible"));
columns.Bound(e => e.Title);
columns.Group(group => group
.Title("Name")
.Columns(name => {
name.Bound(e => e.FirstName).Width(80);
name.Bound(e => e.LastName).Width(80);
})
);
columns.Bound(e => e.FirstName).Width(80);
columns.Bound(e => e.LastName).Width(80);
columns.Bound(e => e.Title).Width(250);
columns.Bound(e => e.FirstName).Width(80);
columns.Bound(e => e.LastName).Width(80);
columns.Bound(e => e.Title).Width(250);
})
.Size(ComponentSize.Small)
.Scrollable()
.Sortable()
.Resizable(resize => resize.Columns(true))
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("CustomCommand_Read", "Grid"))
)
)
</div>
@(Html.Kendo().Window().Name("Details")
.Title("Customer Details")
.Visible(false)
.Modal(true)
.Draggable(true)
.Width(300)
)
<script type="text/x-kendo-template" id="template">
<div id="details-container">
<h2>#= FirstName # #= LastName #</h2>
<em>#= Title #</em>
<dl>
<dt>City: #= City #</dt>
<dt>Address: #= Address #</dt>
</dl>
</div>
</script>Script.js:
function showDetails(e) {
e.preventDefault();
var detailsTemplate = kendo.template($("#template").html());
var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
var wnd = $("#Details").data("kendoWindow");
wnd.content(detailsTemplate(dataItem));
wnd.center().open();
}
function colVisible(dataItem) {
var visible = dataItem.LastName == "Fuller";
return !visible;
}Is there a way to make the custom command appear? I guess that the width of the grid is being set by "container", I've predefined column widths of some of the columns, and it works out which columns appear before the visibility of the custom command is decided, so that appears behind the first Title column?
Kind regards,
Richard

I have a grid where I am using a custom grouping javascript event becuase one of the columns is using an editor template, when they group by that column, I want them to actually group by the hidden column containing the data for the column, not the ID.
When I drag the item to group it, the category name displays fine, having run through my javascript function.
But when I click the three dots and use the column menu, and select Group, it uses the ID instead, and you can see that is what it is grouped by in the header.
I suppose I could get around this by setting a custom group header for it? I'm just not sure why it's by passing my javascript.

In this example
https://demos.telerik.com/aspnet-core/grid/ai-toolbar
It references
.Service("https://demos.telerik.com/service/v2/ai/grid/smart-state")
However no code example or details of how to implement this
Where do I find the code or documentation of how to implement