I'm in the process of rewriting all Kendo components to use CSP compatible templates. I'm looking at https://docs.telerik.com/aspnet-core/html-helpers/template/overview which shows how we'd use TemplateComponentName() for popup editors and that we would need to rewrite everything in the popup editor to use Kendo Template's AddHtml or AddComponent methods.
Original:
<div class="mb-2 row required">
@Html.LabelFor(model => model.FileName, new { @class = "col-sm-4 col-form-label fw-bold text-sm-end" })
<div class="col-sm-6">
@(Html.Kendo().TextBoxFor(model => model.FileName).HtmlAttributes(new { @class = "w-100" }))
</div>
</div>
<div class="mb-2 row">
@Html.LabelFor(model => model.FileDescription, new { @class = "col-sm-4 col-form-label fw-bold text-sm-end" })
<div class="col-sm-6">
@(Html.Kendo().TextBoxFor(model => model.FileDescription).HtmlAttributes(new { @class = "w-100" }))
</div>
</div>
Rewritten:
@(Html.Kendo().Template()
.AddHtml("<div class='mb-2 row required'>")
.AddHtml(@<text>
@Html.LabelFor(model => model.FileName, new { @class = "col-sm-4 col-form-label fw-bold text-sm-end" })
</text>)
.AddHtml("<div class='col-sm-6'>")
.AddComponent(c => c.TextBoxFor(model => model.FileName).HtmlAttributes(new { @class = "w-100" }))
.AddHtml("</div></div>")
.AddHtml("<div class='mb-2 row'>")
.AddHtml(@<text>
@Html.LabelFor(model => model.FileDescription, new { @class = "col-sm-4 col-form-label fw-bold text-sm-end" })
</text>)
.AddHtml("<div class='col-sm-6'>")
.AddComponent(c => c.TextBoxFor(model => model.FileDescription).HtmlAttributes(new { @class = "w-100" }))
.AddHtml("</div></div>")
)While this works, this markup seems much harder to read than the original. Could this be made to be simpler? Ideally I'd like to be able to drop my existing mix of html and kendo components in one method and it'd parse through to render the template properly.
As a result of an EF Core issue, the ToDataSourceResult() is not able to perform the query when the DataSourceRequest object contains grouping.
The problem occurs using the query below, assembled by Telerik routine:
var temp = _db.Pessoa
.OrderBy(item => item.Email)
.Skip(0)
.Take(40)
.GroupBy(item => item.Email)
.OrderBy(g => g.Key)
.Select(g => new AggregateFunctionsGroup
{
Key = g.Key,
ItemCount = g.Count(),
HasSubgroups = false,
Member = "Email",
AggregateFunctionsProjection = new
{
Count_Referencia = _db.Pessoa
.Select(t => new
{
t.IdPessoa,
t.Referencia,
t.Nome_RazaoSocial,
t.Apelido_Fantasia,
t.CPF_CNPJ,
t.RG_IE,
t.Email
})
.OrderBy(item => item.Email)
.Where(item => item.Email == g.Key)
.Count()
},
Items = g
})
.ToList();In the routine where the AggregateFunctionsGroup is created, the Items property must not only be the query itself, but also the fields specified in the main Select. Or, the call to the Select() method must simply be added:
var temp = _db.Pessoa
.OrderBy(item => item.Email)
.Skip(0)
.Take(40)
.GroupBy(item => item.Email)
.OrderBy(g => g.Key)
.Select(g => new AggregateFunctionsGroup
{
Key = g.Key,
ItemCount = g.Count(),
HasSubgroups = false,
Member = "Email",
AggregateFunctionsProjection = new
{
Count_Referencia = _db.Pessoa
.Select(t => new
{
t.IdPessoa,
...
})
.OrderBy(item => item.Email)
.Where(item => item.Email == g.Key)
.Count()
},
Items = g.Select(t => new
{
t.IdPessoa,
...
})
})
.ToList();This way, the issue does not occur.
Dojo example: https://dojo.telerik.com/eRazIrIB
The data is requested, but it is not displayed in the Grid.
The data is displayed, regardless of the type of loader used.
The grid must allow changes to be made in specific cells, without those changes being committed/saved unless the user clicks on the "Save" button in the toolbar. Basically the users enter in some values for editable currency columns that aren't locked, and (without saving) some columns (both locked and not locked) that are not editable must be refreshed as the value in those cells depend on the edited column. Those cells have client templates and client footer templates which need to be used by whatever is refreshing their cells.
Having this functionality provided built-in will be a nice addition:
https://docs.telerik.com/kendo-ui/knowledge-base/grid-update-particular-row-without-refresh
The column format applied through the .Format() option is ignored, if the column is bound to a nullable DateOnly field.
public DateOnly? PaymentDate { get; set; }
columns.Bound(p => p.PaymentDate).Title("Date").Format("{0:MM/dd/yyyy}").Width(160);
The specified format is ignored, e.g., the Grid shows 2025-01-21, instead of 01/21/2025
The specified column format is applied.
### Bug report
When the Grid filter menu is customized with a DropDownList, the initial option defined by using the "index" property is not set.
### Reproduction of the problem
A Dojo sample for reproduction: https://dojo.telerik.com/OmeXUfaF
### Expected/desired behavior
The DropDownList should be initialized with an initially selected option.
### Environment
* **Kendo UI version: 2022.1.119
* **jQuery version: 1.12.4
* **Browser: [all]
The last checkbox selection is not disabled and allows all the columns to be removed if the menu options for the command column are explicitly set to false:
The last checkbox selection should be disabled without allowing all the columns to be removed if the menu options for the command column are explicitly set to false:
The following dojo depicts the aforementioned behavior.
Trouble on iPad 6/7/8 with Safari.
Using grid with batch and incell edit mode.
Datepicker is not working. It just shows the text box to manually type in date.
Every once in a while the date picker pops up and stays for selection.
Sometimes I see the dat picker, but it goes away suddenly before being able to set a date.
Current configuration: server-side filtering
Desired behavior:
When a Grid's row is reordered and then the changes are saved - a Destroy request is sent to the server for the dataItem of the reordered row. This happens even though no changes are applied to dataItem of the reordered row.
The Grid should request the reordered item to be perished from the backend.
### Bug report
When the Grid is initialized in a hidden container (for example, in a non-selected tab of a TabStrip) and its initial data binding is disabled (autoBind: false), the pager information is not visible when the data is loaded afterward.
### Reproduction of the problem
1. Initialize a Grid into a non-selected tab of a TabStrip and set its autoBind option to "false".
2. Select the tab and check how the empty Grid is rendered.
3. Call the read() method of the Grid's DataSource in the browser console to request the data.
4. The data is loaded, but the pager information remains hidden.
A Dojo sample for reproduction: https://dojo.telerik.com/njVgBvza
### Expected/desired behavior
The pager information must be available when the data is loaded into the Grid.
### Environment
* **Kendo UI version: 2024.4.1112
* **jQuery version: 3.7.1
* **Browser: [all]
Dynamic Grid produces a RunTimeException when the Filterable() configuration is enabled
System.ArgumentNullException: Value cannot be null.Example
@model System.Data.DataTable
@(Html.Kendo().Grid<dynamic>()
.Name("gridItem")
.Columns(columns =>
{
foreach (System.Data.DataColumn dcolumn in Model.Columns)
{
columns.Bound(dcolumn.ColumnName).Title(dcolumn.Caption);
}
})
...
.Filterable()
)
The aforementioned declaration will work in the previous 2024.3.1015 version of the suite.
The Grid makes the application throw a runtime error.
The Grid makes the application should not throw a runtime error.
By default, when the "paste" command is added, the default option is "insert" mode ("Paste (Insert)"). Is it possible to add an option that allows setting the default paste mode to "replace" ("Paste (Replace)")?
The custom ordering of the filter values in the Telerik UI ASP.NET Core Grid does not function correctly when using TagHelpers.
A REPL sample for reproduction: https://netcorerepl.telerik.com/wIYNvEvn00CAqNGL14
The filter values should be presented in the same order as specified in the Filterable configuration.