We noticed while testing the latest version (UI for ASP.NET Core R2 2022 (version 2022.2.510)) that hidden grid columns are incorrectly exported to Excel. Rolling back one version resolves the issue so it appears to be an issue in the new version.
I verified it in the grid demos on your site, and also verified that the bug is not present in the jQuery version.
jQuery version - no issue
ASP.NET Core version - BUG
When deleting a record in a grouped editable Grid, the "Destroy" action is triggered twice.
The "Destroy" action should not be triggered twice.
New lines are not removed from the serialized Toolbar.ClientTemplate when multiline content is provided and the Grid is in a DetailTemplate, thus generating an invalid template and causing a Chrome Exception.
The following template configuration is valid and works for the parent grid, but not for child grids:
.ToolBar(toolbar => toolbar.ClientTemplate(@"
<div class='filter'>
<span class='k-textbox k-display-flex auto-filter''>
<input id='search' autocomplete='off' class='k-input' placeholder='Search...' title='Search...' type='text'>
<span class='k-input-icon'><span class='k-icon k-i-search'></span></span>
</span>
</div>
"))
Invalid template is generated
A valid template should be generated
Expose configuration options for setting the options - Size, ThemeColor, FillMode and Rounded - of the Grid's command buttons and toolbar buttons, as possible for a simple Button component.
Adding a separate configuration for the Cancel command button would also be beneficial. For example:
.Columns(columns => { columns.Bound(p => p.ProductName); columns.Bound(p => p.UnitPrice).Width(140); columns.Bound(p => p.UnitsInStock).Width(140); columns.Bound(p => p.Discontinued).Width(100); columns.Command(command => command.Destroy().ThemeColor(ThemeColor.Error)).Width(150); }) .ToolBar(toolbar => { toolbar.Create().ThemeColor(ThemeColor.Info).Size(ComponentSize.Large); toolbar.Save().ThemeColor(ThemeColor.Success); toolbar.Cancel().ThemeColor(ThemeColor.Warning); })
Having a grid with a similar column setup will result in an error.
.Columns(columns =>
{
columns.Bound(p => p.UnitsInStock).HtmlAttributes(new { @class = "#: UnitsInStock == 39 ? 'test' : 'a' #" });
})
Having a grid with a similar column setup should not result in an error.
.Columns(columns =>
{
columns.Bound(p => p.UnitsInStock).HtmlAttributes(new { @class = "#: UnitsInStock == 39 ? 'test' : 'a' #" });
})
If I put the Grid into a kendo-template for the TileLayout control, the ClientTemplate does not work properly. It only gets called once regardless of the number of items in the grid and the data is not being passed in.
This is my column definition:
columns.Bound(c => c.DocumentKey).Title(" ").ClientTemplate("#=CommandTemplate(data)#").Width(70);
And I am calling the .ToClientTemplate() on the Grid. Everything else work great except for this one issue.
I have not been able to find any other info, so what am I missing?
The second criterion DropDownList in the Filter Menu does not show records upon interaction:
The second criterion DropDownList in the Filter Menu should show records upon interaction:
### Bug report
When dragging and dropping a row within the Grid, the DOM element of the drag handle receives duplicated classes and styles.
### Reproduction of the problem
1) Enable the Drag & Drop functionality of the Grid.
2) Drag and drop a row within the Grid.
3) Inspect the DOM element of the drag handle - it has multiple duplicated classes and styles:
A Dojo sample for reproduction: https://dojo.telerik.com/IRotEKEX
### Environment
* **Kendo UI version: 2023.2.606
* **jQuery version: 1.12.4
* **Browser: [all]
Currently, calling the ClientTemplate method of the Grid's ToolBar overrides any previously defined commands.
It would be really useful to expose an option to use the Template component to define a custom command for the Grid's ToolBar, instead of having to rewrite the entire TollBar in the ClientTemplate configuration.
I am using the Grid with two editor template bound to viewdata to populate the components.
Now this is code that I wrote in 2017 that I recent upgraded to .NET 7 ASP Core and has work all those years with no issue. So I think this may be a regression in the grid code.
I have embedded the relevant code leaving out the grid views custom javascript since it isn't relevant.
The behavior that I am seen is that the the grids model properties that do NOT use a customer editor template are not being bound when the save event fires.
public class AlertRuleGridViewModel
{
public int Id { get; set; }
[UIHint("ComponentEditor")]
public string? Component { get; set; }
[UIHint("EmailAddress")]
public string? Email { get; set; }
[UIHint("TypeEditor")]
public string? Type { get; set; }
[UIHint("Boolean")]
public bool Enabled { get; set; }
}
<div class="container alert-rules-grid">
@(Html.Kendo().Grid<AlertRuleGridViewModel>()
.Name("alert-grid")
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(l => l.Id);
model.Field(field => field.Id).Editable(false);
model.Field(field => field.Type).DefaultValue(ViewData["defaultType"] as String);
})
.PageSize(12)
.Sort(a => a.Add("Id").Descending())
.Read(read => read.Action("GetRules", "Alerts").Data("additionalData"))
.Create(update => update.Action("UpdateRule", "Alerts"))
.Update(update => update.Action("UpdateRule", "Alerts"))
.Destroy(destroy => destroy.Action("DeleteRule", "Alerts"))
.Events(e => e.Error("gridErrorHandler"))
)
.Columns(columns =>
{
columns.Bound(b => b.Id).Title("Id").Visible(true).Width("4%");
columns.Bound(b => b.Component).Title("Component").EditorTemplateName("ComponentEditor").Visible(true);
columns.Bound(b => b.Email).Title("Email").Visible(true);
columns.Bound(b => b.Type).Title("Log Type").EditorTemplateName("TypeEditor").Visible(true);
columns.Bound(b => b.Enabled).Title("Enabled").ClientTemplate("#=renderStatus(data)#").Visible(true);
columns.Command(command =>
{
command.Edit();
command.Destroy();
});
}
)
.ToolBar(toolBar =>
{
toolBar.ClientTemplateId("toolBarTemplate");
})
.Events(events =>
{
events.Cancel("onCancelEdit");
events.Save("onSave");
}
)
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Pageable() // Enable paging
.Sortable() // Enable sorting
.Scrollable(s => s.Height("auto"))
.Resizable(resize => resize.Columns(true))
)
</div>
I suspect the issue is the generated html for the input that used the editor template.
The data-bind attribute is set to "value:Component.Component" which should be "value:Component"<td class="k-table-td" role="gridcell" data-container-for="Component">
<span class="k-input k-combobox k-combobox-clearable k-input-solid k-input-md k-rounded-md k-valid" style="">
<input name="Component.Component_input" class="k-input-inner k-valid" type="text" autocomplete="off" title="" role="combobox" aria-expanded="false" style="" tabindex="0" aria-disabled="false" aria-readonly="false" aria-busy="false" aria-autocomplete="none" aria-controls="Component_Component_listbox" data-bind="value:Component.Component_input">
<span unselectable="on" class="k-clear-value k-hidden" title="clear" role="button" tabindex="-1">
<span class="k-svg-icon k-svg-i-x" aria-hidden="true">
<svg viewBox="0 0 512 512" focusable="false" xmlns="http://www.w3.org/2000/svg">
<path d="M416 141.3 301.3 256 416 370.7 370.7 416 256 301.3 141.3 416 96 370.7 210.7 256 96 141.3 141.3 96 256 210.7 370.7 96l45.3 45.3z"/>
</svg>
</span>
</span>
<button type="button" class="k-input-button k-button k-button-md k-button-solid k-button-solid-base k-icon-button" aria-label="expand combobox" role="button" tabindex="-1">
<span class="k-svg-icon k-svg-i-caret-alt-down k-button-icon" aria-hidden="true">
<svg viewBox="0 0 512 512" focusable="false" xmlns="http://www.w3.org/2000/svg">
<path d="M256 352 128 160h256L256 352z"/>
</svg>
</span>
</button>
<input id="Component_Component" name="Component.Component" type="text" value="" data-role="combobox" aria-disabled="false" aria-readonly="false" style="display: none;" data-bind="value:Component.Component"/>
<script>kendo.syncReady(function(){jQuery("#Component_Component").kendoComboBox({"dataTextField":"Name","dataValueField":"Value","valuePrimitive":true,"dataSource":[{"Name":"AppLog.Common.Test","Value":"AppLog.Common.Test"},{"Name":"AppLog.WebAPI","Value":"AppLog.WebAPI"},{"Name":"BadgeReader","Value":"BadgeReader"},{"Name":"CCS.WebUI","Value":"CCS.WebUI"},{"Name":"LVCVA.AppLog.Internal.Web","Value":"LVCVA.AppLog.Internal.Web"},{"Name":"LVCVA.AppSecurity.Domain","Value":"LVCVA.AppSecurity.Domain"},{"Name":"Registration.WPF.UI","Value":"Registration.WPF.UI"},{"Name":"spLogApplicationMessage","Value":"spLogApplicationMessage"}]});});</script>
<span class="field-validation-valid" data-valmsg-for="Component" data-valmsg-replace="true"/>
</td>
<td class="k-table-td" role="gridcell" data-container-for="Type">
<span title="" class="k-picker k-dropdownlist k-picker-solid k-picker-md k-rounded-md k-valid" unselectable="on" role="combobox" aria-expanded="false" tabindex="0" aria-controls="Type_Type_listbox" aria-disabled="false" aria-readonly="false" aria-busy="false" aria-describedby="e73b8727-5e28-4d9b-9faa-df8239f54aa5" style="">
<span id="e73b8727-5e28-4d9b-9faa-df8239f54aa5" unselectable="on" class="k-input-inner">
<span class="k-input-value-text"/>
</span>
<span role="button" class="k-input-button k-button k-button-md k-button-solid k-button-solid-base k-icon-button" aria-label="select" type="button">
<span class="k-svg-icon k-svg-i-caret-alt-down k-button-icon" aria-hidden="true">
<svg viewBox="0 0 512 512" focusable="false" xmlns="http://www.w3.org/2000/svg">
<path d="M256 352 128 160h256L256 352z"/>
</svg>
</span>
</span>
<input id="Type_Type" name="Type.Type" type="text" value="" data-role="dropdownlist" style="display: none;" data-bind="value:Type.Type"/>
<script>kendo.syncReady(function(){jQuery("#Type_Type").kendoDropDownList({"dataTextField":"Type","dataValueField":"Value","valuePrimitive":true,"dataSource":[{"Type":"Critical","Value":"Critical"},{"Type":"Error","Value":"Error"},{"Type":"Warning","Value":"Warning"},{"Type":"Information","Value":"Information"},{"Type":"Verbose","Value":"Verbose"},{"Type":"Start","Value":"Start"},{"Type":"Stop","Value":"Stop"},{"Type":"Suspend","Value":"Suspend"},{"Type":"Resume","Value":"Resume"}]});});</script>
<span class="field-validation-valid" data-valmsg-for="Type" data-valmsg-replace="true"/>
</td>
### Bug report
When the pageSizes option is enabled, it is not displayed when the Grid is initialized inside a hidden container.
### Reproduction of the problem
1) Follow the instructions in this KB article to display a Grid inside a TabStrip component.
2) Enable the "pageSizes" setting.
3) The drop-down, which allows the user to change the page size is always hidden.
A Dojo sample for reproduction: https://dojo.telerik.com/uCORUHUc
The same example works correctly with version 2023.2.718.
### Expected/desired behavior
The pager must display the specified page sizes.
### Workaround
tabstrip.one("activate", function() {
grid.pager._lastWidth = 30;
grid.resize(true);
});
### Environment
* **Kendo UI version: 2023.2.829
* **jQuery version: 1.12.4
* **Browser: [all]
### Bug report
When removing a data item through the DataSource remove() method, and then trying to add a new record in the Grid, the editable row does not close when clicking the "Save" command. The Grid is set up for InLine editing.
### Reproduction of the problem
1) Create an InLine editable Grid that binds to local data.
2) Add a custom column command that removes the respective data item by using the remove() method of the DataSource.
3) Delete a specified Grid record through the custom command.
4) Add a new record and click the built-in "Save" command.
5) The row remains in edit mode.
A Dojo sample for reproduction: https://dojo.telerik.com/IQIDuGOt
The last working version is 2024.1.130
### Expected/desired behavior
The editable row must close when clicking "Save" or "Cancel".
### Workaround
Use the Grid removeRow() method rather than the DataSource remove() method.
### Environment
* **Kendo UI version: 2024.1.319
* **jQuery version: 3.7.0
* **Browser: [all]
### Bug report
The "confirmation" attribute of the editable tag does not accept a string.
### Reproduction of the problem
Add a confirmation text as a string in the "confirmation" attribute, as per the example below:
<kendo-grid name="grid">
...
<editable mode="popup" confirmation="Are you sure you want to hide this invoice?" />
</kendo-grid>
A REPL sample for reproduction: https://netcorerepl.telerik.com/moEqPSFo32PrwW4d01
### Expected/desired behavior
The "confirmation" option must accept a string.
### Environment
* **Telerik UI for ASP.NET Core version: 2024.2.514
* **Browser: [all]
Reproducible with the Grid's tag helper. Works as expected in the Html helper.
The toolbar does not show the RadioGroup.
A RadioGroup should appear in the toolbar, as set in the toolbar command template:
<toolbar-command-template>
<kendo-radiogroup name="test">
<kendo-radiogroup-items>
<kendo-radiogroup-item label="Factor" value="F"></kendo-radiogroup-item>
<kendo-radiogroup-item label="Equation" value="E"></kendo-radiogroup-item>
</kendo-radiogroup-items>
</kendo-radiogroup>
</toolbar-command-template>
### Bug report
When subscribing to the "requestStart"/"requestEnd" events of the DataSource after the Grid's initialization, the events do not fire during the Excel export.
### Reproduction of the problem
1. Enable the server operations of the Grid's DataSource.
2. Get a reference to the Grid and handle the DataSource "requestStart"/"requestEnd" events by using the bind() method.
3. Export the Grid's data to Excel through the built-in command.
4. The "requestStart"/"requestEnd" events do not trigger when the read request is activated.
A Dojo sample for reproduction: https://dojo.telerik.com/eyiDIGeM
### Expected/desired behavior
The "requestStart"/"requestEnd" events must trigger when exporting the Grid to Excel.
### Environment
* **Kendo UI version: 2024.3.806
* **jQuery version: 3.7.0
* **Browser: all
When the Grid is nested in a relatively positioned container, during the export the Grid gets an overflow style to its wrapping element. Then the style is removed and re-added again. This happens in a loop, which results in a vertical scrollbar constantly appearing and hiding.
Flickering caused by a scrollbar appearing and hiding
The Grid should remain unchanged during the export and no scrollbar should appear and hide during the export.
### 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]
When ParseFormats is set in the DatePicker editor used in the Grid popup, the picker does not show the field value to which it is bound.
public DateOnly? OrderDate { get; set; }
.Model(model =>
{
model.Id(p => p.OrderID);
model.Field(p => p.OrderDate).DefaultValue(new DateOnly());
})
@model DateOnly?
@(Html.Kendo().DatePickerFor(m => m).ParseFormats(new string[] { "MM/dd/yyyy" }).HtmlAttributes(new { title = Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName("") }))
When editing a record. The value of the OrderDate field is not displayed in the DatePicker.
If you remove the ParseFormats option from the DatePicker, it shows the value as expected.
The field value should be displayed in the picker, even when ParseFormats is set.