Similar to the WPF grid I would like the option to require the user hold shift to sort by multiple columns, otherwise the grid would sort by only a single column.
https://docs.telerik.com/devtools/wpf/controls/radgridview/sorting/multiple-column-sorting
I'm trying to use the FilterMenu with the CheckBoxListFilter, and it seems like it's sooo close to what I want, if it only had an option for FieldText and FeildValue or something like that. Any way I can get this working to use the ID field as the value and the Name as the text? The highlighted section below is what I would envision it working perfectly as.
<GridColumn Field="@nameof(WorkActivity.WorkGroupId)" Title="Work Group" Width="135px">Hello,
Please consider a Grid feature that changes the component layout on mobile devices or narrow screens. The idea is to switch the column layout to a card layout or anything similar to this example: https://css-tricks.com/responsive-data-tables/
It is possible to implement a similar behavior with the Telerik Blazor Grid and MediaQuery components, but it requires reusing the column titles in the CSS code: https://blazorrepl.telerik.com/GnYPmHFR176Jg5Yg02
===
Telerik Blazor team: Everyone who is interested in this feature, please vote for it to help us prioritize. Also, share your opinion about which Grid features you strictly need in the "mobile" layout and which ones you are ready to sacrifice. Some features don't make sense in a card / listview layout anyway, but still, the mobile-friendly Grid may require completely different HTML markup and UX, so some features may need to be completely revamped.
Hello,
Please consider Grid data binding support for ImmutableArray. Currently, it crashes when the Grid tries to retrieve the total items count at:
Data.AsQueryable().Count();
Immutable*<T> classes are popular in state libraries.
Currently, the possible workarounds are:
If LoadGroupsOnDemand="false", I am able to programmatically expand the groups through the state. However, this is not possible when loading group data on demand.
Please allow programmatically expanding the groups when LoadGroupsOnDemand="true". This should go together with an event (OnStateChanged?) that will fire when LOD groups are expanded or collapsed.
Feature Request
Currently, when a grid is rendered with 500 rows in a WASM application and expand/collapse action is initiated, it takes a few seconds to finish grouping and rendering.
Steps to reproduce
1. Create a grid in WASM app.
2. Add 500 rows.
3. Do not enable paging.
4. Group by any field and initiate expand/collapse.
5. All rows are re-rendered which leads to a few seconds delay.
A nice feature would be frozen Group Rows.
So if you grouped your data in the Grid and scroll. The Group should stick underneath the header.
As an example look here: https://www.ag-grid.com/angular-data-grid/grouping-sticky-groups/
I have applications for which I would like to define the default join operator for Grid filters to be "OR" instead of the default "AND."
Please expose an option to customize the default logical operator in Filter Menu.
The Grid selection performance is worse in WASM when there is a command column. Here is a test page with a large page size, which makes this more evident.
<label><TelerikCheckBox @bind-Value="@ShowCommandColumn" /> Show Command Column</label>
<TelerikGrid Data="@DataList"
SelectionMode="@GridSelectionMode.Single"
Height="700px">
<GridColumns>
<GridColumn Field="@(nameof(DataModel.Pos))" Title="Pos" />
@if (ShowCommandColumn)
{
<GridCommandColumn Width="300px">
<GridCommandButton Command="Save" Icon="save">Reset Volume</GridCommandButton>
<GridCommandButton Command="Delete" Icon="delete">Delete</GridCommandButton>
</GridCommandColumn>
}
</GridColumns>
</TelerikGrid>
@code {
bool ShowCommandColumn { get; set; } = true;
List<DataModel> DataList { get; set; }
protected override async Task OnInitializedAsync()
{
DataList = new List<DataModel>();
for (int i = 1; i <= 500; i++)
{
DataList.Add(new DataModel
{
Pos = i
});
}
}
public class DataModel
{
public int Pos { get; set; }
}
}
Hello,
Currently the Id and Field properties of GridColumnState in the GridState do not have setters. As a result, these properties are not deserialized, e.g. when sending GridState information from the client to the server in WebAssembly apps.
I would like to determine the existing columns in the Grid and tailor the database request, so that the fetched data includes only the required columns.
Another possible use case is detecting outdated GridState information in localStorage, after the app has been updated and the Grid contains different columns.
I have a Grid with numerous columns and I am using inline editing. When in edit mode, I'd like to add custom content to each cell - for example, a validation error message from server validation.
To achieve that, I have to use EditorTemplate. However, I want to keep the default editor because I'd like to avoid having to add the relevant control for every single cell each time I add a new Grid.
The `Context` of `<GridColumn>` is of type `object`, requiring typecasting in order to use the value.
Instead, make `<GridColumn>` generic so that `Context` is strongly typed. If you use `TItem` as the name for the generic then Blazor will infer it without the user having to specify it.
The request targets a hierarchical Grid where some items are expanded - when I edit a parent item and then update it, all the respective detail items collapse.
Please add support for persisting the expanded state of the items.
---
ADMIN EDIT
---
The feature applies to the other data operations as well (for example, paging, sorting, filtering etc.).
Would like a parameter in the grid definition that would display a Clear/Refresh button to return the grid to all originally selected records. This feature would work similar to the Excel clear filter function.
===
TELERIK EDIT: To reset the Grid filters, you can clear the FilterDescriptors collection and the SearchFilter property in the Grid state. Here is an example:
https://blazorrepl.telerik.com/cfEoatOr000uBdgW48
private TelerikGrid<Product>? GridRef { get; set; }
private async Task ClearGridFilters()
{
var gridState = GridRef!.GetState();
gridState.FilterDescriptors = new List<IFilterDescriptor>();
gridState.SearchFilter = default;
await GridRef.SetStateAsync(gridState);
}