Completed
Last Updated: 15 Aug 2023 14:10 by ADMIN
Release 4.5.0 (08/30/2023) (R3 PI2)

When the Grid has a non-grouped column at first position, there is a missing left border in an adjacent cell on the second line of the header area.

First reported in:

https://www.telerik.com/forums/multi-column-line-in-grid-occasionally-missing

Possible workarounds:

  • Move the non-grouped column to another position.
  • Wrap the non-grouped column in its own group.

Test page to reproduce:

(Uncomment the group column to use the second workaround from above.)

<TelerikGrid Data="@Data">
    <GridColumns>
        @*<GridColumn Title="Title">
        <Columns>*@
            <GridColumn Field="ID" />
        @*</Columns>
        </GridColumn>*@
        <GridColumn Title="Group">
            <Columns>
                <GridColumn Field="Name" />
            </Columns>
        </GridColumn>
    </GridColumns>
</TelerikGrid>

@code {

    public List<GridItem> Data { get; set; } = new List<GridItem>() {
        new GridItem() { ID = 1, Name = "Name 1" }
    };

    public class GridItem
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
}

 

Unplanned
Last Updated: 21 Jun 2021 07:42 by ADMIN
When adding an item in InCell mode and a cell on the row has an invalid value the Grid should keep the record in edit mode until a valid value is entered
Completed
Last Updated: 09 Aug 2022 07:44 by ADMIN
Release 3.6.0 (14 Sep 2022) (R3 2022)
Field and Value properties from GridCommandEventArgs don't populate in Incell editing. Their value is always null and thus I cannot get information for the edited field.
Unplanned
Last Updated: 31 Oct 2023 17:20 by ADMIN

Please support Display(Order = ...) with autogenerated Grid columns.

Such functionality will also be useful for controlling the order of manually declared columns when using a custom component for reusable columns. For example: https://blazorrepl.telerik.com/cGOtbwOX21f6zQcy35 - the "Name" column is rendered last and currently one cannot control its order.

public class DateModel
{
  [Display(Order = 2)]
  public string Id { get; set; }
  [Display(Order = 1)]
  public string Text { get; set; }
}

 

Unplanned
Last Updated: 21 Nov 2023 08:36 by Douglas

I have created a custom model where I added an ExpandoObject and a couple properties to it. The Grid seems to render the data successfully but the data operations are not possible - the nested properties are treated as invalid. Please add support for nested ExpandoObject properties in custom models.

---

ADMIN EDIT

---

For the time being, there is a workaround that you may try. Use the ExpandoObject directly, do not nest it in the custom model - bind the Grid Data to a collection of ExpandoObject and populate its properties in the OnInitialized.

 

@using System.Dynamic

<TelerikGrid Data="@Data" 
             Pageable="true" Sortable="true" Groupable="true"
             FilterMode="Telerik.Blazor.GridFilterMode.FilterRow"
             EditMode="@GridEditMode.Incell"
             Resizable="true" Reorderable="true">
        <GridColumns>
            <GridColumn Field="Id" FieldType="typeof(string)" Width="120px" />
            <GridColumn Field="DetailData.PropertyInt" Title="Column A" FieldType="@typeof(int)"  />
            <GridColumn Field="DetailData.ProptertyString" Title="Column B" FieldType="@typeof(string)"/>
            <GridColumn Field="DetailData.PropertyDate" Title="Column C" FieldType="@typeof(DateTime)"/>
        </GridColumns>
</TelerikGrid>


@code {
    public ExpandoObject[] Data { get; set; } = Array.Empty<ExpandoObject>();

    protected override async Task OnInitializedAsync()
    {
        Data = new ExpandoObject[]
            {
            GetPopulatedExpando(1),
            GetPopulatedExpando(2),
            GetPopulatedExpando(3),
            GetPopulatedExpando(4),
            GetPopulatedExpando(5),
            };
    }

    private ExpandoObject GetPopulatedExpando(int id)
    {
        dynamic expando = new ExpandoObject();
        expando.Id = id;
        dynamic nested = new ExpandoObject();
        nested.PropertyInt = id;
        nested.ProptertyString = "ID " + id;
        nested.PropertyDate = new DateTime(2022, 4, id);
        expando.DetailData = nested;

        return expando;
    }
}

 

Unplanned
Last Updated: 26 Apr 2022 15:19 by Beena

I am adding validation messages for the popup form fields and I do not want to display the ValidationSummary in addition to them. Please add option to remove it.

---

ADMIN EDIT

---

Built-in field validation messages will be exposed in future version of the product. Thus, you can add inline or tooltip validation messages to the Popup edit form without an EditorTemplate.

For the time being, you can remove the ValidationSummary with some CSS. Here is an example of hiding the ValidationSummary and adding inline ValidationMessage for the ProductName field: https://blazorrepl.telerik.com/cckycgPf37NZfy9J11

Unplanned
Last Updated: 15 Aug 2024 12:39 by Lee
Created by: Rac
Comments: 3
Category: Grid
Type: Feature Request
7

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.

Completed
Last Updated: 12 Feb 2025 16:03 by ADMIN
Release 8.0.0
Created by: David
Comments: 1
Category: Grid
Type: Bug Report
7

When the Grid is databound via OnRead event, the initially displayed aggregates are wrong and take into account the first page only.

A possible workaround is to bind the Grid in OnAfterRenderAsync -

@using Telerik.DataSource
@using Telerik.DataSource.Extensions

<TelerikGrid @ref="@GridRef"
             OnRead="@OnGridRead"
             TItem="@Product"
             Pageable="true">
    <GridAggregates>
        <GridAggregate Field="@nameof(Product.Name)" Aggregate="@GridAggregateType.Count" FieldType="@(typeof(System.String))" />
    </GridAggregates>
    <GridColumns>
        <GridColumn Field="@nameof(Product.Name)" Title="Product Name">
            <FooterTemplate>
                @context.Count
            </FooterTemplate>
        </GridColumn>
        <GridColumn Field="@nameof(Product.Price)" />
        <GridColumn Field="@nameof(Product.ReleaseDate)" Title="Release Date" />
        <GridColumn Field="@nameof(Product.Active)" />
    </GridColumns>
</TelerikGrid>

@code {
    TelerikGrid<Product> GridRef { get; set; }
    List<Product> GridData { get; set; }

    bool ShouldBindGrid { get; set; }

    async Task OnGridRead(GridReadEventArgs args)
    {
        if (!ShouldBindGrid)
        {
            return;
        }

        await Task.Delay(200); // simulate network delay

        DataSourceResult result = GridData.ToDataSourceResult(args.Request);

        args.Data = result.Data;
        args.Total = result.Total;
        args.AggregateResults = result.AggregateResults;
    }

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            // workaround for initial Grid aggregates
            ShouldBindGrid = true;
            GridRef.Rebind();
            StateHasChanged();
        }
    }

    protected override void OnInitialized()
    {
        GridData = new List<Product>();
        var rnd = new Random();

        for (int i = 1; i <= 50; i++)
        {
            GridData.Add(new Product()
            {
                Id = i,
                Name = "Product " + i.ToString(),
                Price = (decimal)rnd.Next(1, 100),
                ReleaseDate = DateTime.Now.AddDays(-rnd.Next(60, 1000)),
                Active = i % 3 == 0
            });
        }
    }

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
        public DateTime ReleaseDate { get; set; }
        public bool Active { get; set; }
    }
}

Unplanned
Last Updated: 06 Mar 2023 11:53 by Peter

Currently, the Grid doesn't display its built-in loading animation on initial data (page) load.

The OnRead handler is now completely decoupled with the Data parameter, so the limitation can be removed at least for OnRead scenarios.

Completed
Last Updated: 14 Nov 2024 09:26 by ADMIN
Release 7.0.0

When using the Filter Menu inside the Column Menu filter value is reset if Rebind is called. For reference, if using FIlter Row or a standalone Filter Menu value is not reset upon invoking Rebind.

Reproduction: https://blazorrepl.telerik.com/mdOJYHas48vPCPUv47.

Unplanned
Last Updated: 22 Jan 2025 09:29 by 剛
Enhance the group header template context by including additional properties such as the parent group field and value.
Unplanned
Last Updated: 13 Aug 2024 06:46 by Nikolas
Created by: Felix
Comments: 2
Category: Grid
Type: Feature Request
7
I have a Grid with lots of rows and I have enabled grouping. Due to the fact that I need to show all groups expanded by default I cannot use Load Groups on demand and row virtualization. When I expand/collapse groups the performance is not good. 
Unplanned
Last Updated: 14 Jun 2024 06:58 by Nazim
Currently, changing the DateTime format is possible for all other types of FilterMenus. However, the FilterEditorFormat parameter does not affect the dates in a FilterMenu of type CheckBoxList.
Completed
Last Updated: 10 Mar 2020 11:10 by ADMIN
Release 2.9.0

At the moment the numeric and date filters keep the filter button visible even on narrow columns. This must be implemented for the string filter as well - it has a set width at the moment.

The "clear filter" button must always be visible as well (when there is a filter applied, of course).

Ideally, the filter elements will also have a common container with an accessible class so, for example, you can set its max-width to 50% or 100px to match desired UI easily without hacking through several different layouts and selectors.

Completed
Last Updated: 28 Sep 2021 06:50 by ADMIN
Created by: Brian
Comments: 3
Category: Grid
Type: Feature Request
6

It is a common request to show grids in alternating colors, rather than simply white and grey.  Because the Grid component generates the <tr> element, we are left with manually setting each <td> element.  A tedious but effective solution.

The feature I would like to request is to add 2 new tags to the <TelerikGrid> component, call them EvenRowClass, and OddRowClass.  The behavior is the same as the Class tag, but they operate on Even and Odd numbered rows of data, respectively.  Their values would be added to the <tr> element as <tr class="MyEvenClass"> or <tr class="MyOddClass" in the same manner class k-alt is generated or not.  This would provide a simple yet extensible mechanism to achieve custom alternating row colors in a Grid.

 
Unplanned
Last Updated: 12 Mar 2020 13:09 by Gilles
Created by: Werner
Comments: 5
Category: Grid
Type: Feature Request
6

The GridCheckboxColumn for the Blazor Grid is simply confusing.

I think 99 % of the users assume the GridCheckboxColumn is intended to be used for boolean field types.

Functionality is very nice but naming could be e.g. "GridSelectionColumn" to clarify what's it's purpose.

 

Completed
Last Updated: 27 Oct 2021 08:49 by ADMIN
Release 2.28.0
Created by: Jack
Comments: 1
Category: Grid
Type: Bug Report
6
When the text of the column header is long enough or the column narrow enough, the filter menu icon overlaps the text.
Unplanned
Last Updated: 24 Apr 2020 10:12 by ADMIN
Created by: Viktorija
Comments: 1
Category: Grid
Type: Feature Request
6

We are using Grid control with OData source (ToODataString() exstension) and OnRead event. When we try to group by some column, it douesn't work. OData query to API is same and OnRead event fires but grid not grouping.

Completed
Last Updated: 26 Oct 2020 13:34 by ADMIN
Release 2.19.0

Example Repo - https://github.com/benhysell/BlazorGridPagingIssue

tldr - OnRead args do not contain the correct page after restoring state without manual intervention.

 

Project Setup

  • Base Blazor Client/Server template with Weather Forecasts as the data
  • Server has a single OData endpoint to return 50 weather forecasts.  Each forecast starts with Temperature 0 and adds 1 per row to allow one to know which page they should be on
  • Client has two pages configured, 'Paging NOT Working' and 'Paging Work Around'

Steps to Reproduce

  • Navigate to 'Page NOT Working', select a page, i.e. page 5, navigate to the Counter page, navigate back to Page NOT Working.
  • Grid will show Page 5 in the page selector, however the data being show in from Page 1
  • Looking at Chrome 'Network' tab the OData query to obtain data from the backend does not contain proper offset for Page 5 data
  • args.Request.Page reports Page 1, however the state of the Grid was just restored to Page 5

Workaround

I currently have a work around, this can be seen in the other page 'Paging Work Around'.

  • On the first call to OnRead I check to see the last Grid state that was stored
  • If the arg.GridState.Page does not match, (Stored vs the Request) I update the Request with the proper Page
  • Proper OData query is generated to the backend.

Expected Behavior

  • After state is restored first call to OnRead() would report the proper Page and make correct OData call.
Completed
Last Updated: 02 Dec 2021 10:06 by ADMIN
Release 2.30.0

Using the Excel Export for Grid creates the Excel file, but on opening it, the columns that contain data are hidden. Unless I unhide the columns, the sprceadsheet looks empty.

---
ADMIN EDIT:
One idea to go about this is to expose an event that would allow users to modify the column width values before they get sent for export. The benefit of this approach is that if the columns are resized, the user will receive their current size in the specified unit e.g. rem, em or % and will be able to set the width in px.

Another idea is to default such column widths to some hardcoded value (say, 64px) or even the grid might try to calculate them (which can cause questionable results in stranger settings, but it is an idea - if an event gets exposed you will be able to do that in your application code).

---