Completed
Last Updated: 26 Sep 2024 13:56 by ADMIN
Release 2024 Q4 (Nov)

I have the following Grid setup:

  • A Grid column is bound to DateOnly or DateOnly?
  • I have manually defined the OnRead event
  • Filter the DateOnly column, and to get the exception:
    • Serialize and deserialize the args.Request in the OnRead event handler with System.Text.Json OR
    • Page the Grid back and forth

Exception: System.ArgumentException: Operator 'IsEqualTo' is incompatible with operand types 'DateOnly?' and 'DateTime'

Completed
Last Updated: 26 Sep 2024 13:52 by ADMIN
Release 2024 Q4 (Nov)

Hi,

  

I am using a Blazor TelerikGrid component with Virtual ScrollMode.  I have set a fixed Height, PageSize that exceeds the rows that fit in the grid, and a RowHeight which I have confirmed fits the row contents and resolves to a computed Height of the same value (using Chrome Dev Tools -> Computed tab).  Everything works fine except that sometimes scrolling does not trigger the OnRead event and the rows displayed after scrolling are placeholders. 

I don't experience this problem when I click the scroll arrow buttons (up or down).  I don't experience the problem at all if I drag the scroll bar up or down.  But if I page up/down, or click on the scroll page area up/down it will sometimes work and sometimes not.  If placeholders are shown, I only need to click a scroll button up/down a few times for it to then read and display the correct rows.

To reproduce use the attached VS2019 project, click "Telerik Scroll Issue" nav menu, and in the TelerikGrid click the page down areas of the vertical scrollbar 3 times.




 

<AdminEdit>

The bug is only reproducible with 4k monitor and 200% DPI on Edge Chromium. Also when the "Microsoft Edge scrolling personality" flag from edge://flags/ is disabled, there is no problem.

</AdminEdit>

 

Completed
Last Updated: 24 Sep 2024 15:25 by ADMIN
Release 2024 Q4 (Nov)

Hi Telerik Support

Facing an issue with Keyboard navigation in Telerik Grid component. 

When we use TAB to navigate, the grid header gets focus only for the first time. After completing one round of navigation, second time after the Toolbar buttons, if we TAB out, focus goes to the pager sections skipping the grid header part.

Pls refer the REPL sample from Telerik website:

https://blazorrepl.telerik.com/GHOUEQPu32fDqVkl23?_ga=2.110299852.854118306.1687429777-597574975.1687340896&_gl=1*1exmltg*_ga*NTk3NTc0OTc1LjE2ODczNDA4OTY.*_ga_9JSNBCSF54*MTY4NzQyOTc3Ny40LjEuMTY4NzQzMDkxNC41Ni4wLjA

Steps to reproduce:

1) Use ALT + W and then use TAB key to navigate

2) First focus goes to the Toolbar button (Add Product), then goes to the Grid Header and then if we TAB again focus goes to the Pager section

3) After the Pager section, if we do steps 1 and 2 again, we can see that it skips the Grid Header focus second time onwards.

 

Completed
Last Updated: 20 Sep 2024 13:23 by ADMIN
Release 2024 Q4 (Nov)

Here is the problem or bug I would like you to look at: If the percent entry component that is in the test application is not in an EditorTemplate, then the OnFocusOut event will fire in Firefox when the Tab or Enter keys is pressed. When the component is within an EditorTemplate, the OnFocusOut event does not fire in Firefox for the Tab/Enter key. This leads me to believe that it is a bug in the Grid and Treelist that is blocking that event from firing in Firefox.

Steps to reproduce:

  1. Run the attached project in Firefox.
  2. Change one value in percent and press Tab
  3. Open the same page in Chrome and repeat

---------------------ADMIN EDIT---------------------

There is one way you can use here to avoid manipulating the onfocusout event to handle percentage input. You can create in your model two properties/values. One value for visualization, with a custom format to represent percentage. Another value to pass along to the business logic, that has the actual fraction. You can see a reference to the described approach in this REPL link.

Completed
Last Updated: 20 Sep 2024 12:00 by ADMIN
Release 2024 Q4 (Nov)
Created by: Wei
Comments: 0
Category: Grid
Type: Bug Report
2

When I lock a column that has a footer, the footer should be locked too.

Column virtualization is enabled.

Completed
Last Updated: 20 Sep 2024 11:48 by ADMIN
Release 2024 Q4 (Nov)
Created by: Wei
Comments: 2
Category: Grid
Type: Bug Report
3

When using row virtualization, the visible rows are miscalculated when the browser zoom is used (hold control with mouse scroll). 

The result of the miscalculation is that the first row at some point is not visible.

To reproduce the problem you should scroll to the top of the grid and see the first row.

Then start to zoom down and see how the first row is displaced.

Seems like only 50%, 100%, 150%, 200% (multiply of 50%) are calculated correctly in row virtualization

 

<AdminEdit>

You can reproduce the bug with the attached code.

It's browser-specific and is appearing only in chromium browsers.

It could be related to the way browsers calculate the size of the elements when zooming.

Currently, there is an open bug in the chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=1048147&q=component%3AUI%3EBrowser%3EZoom%20height&can=2 

</AdminEdit>

 

Completed
Last Updated: 20 Sep 2024 11:39 by ADMIN
Release 2024 Q4 (Nov)

You can work around this by disabling virtual scrolling with something like this:

ScrollMode="@(Data.Count() > 30 ? GridScrollMode.Virtual : GridScrollMode.Scrollable)"

Completed
Last Updated: 20 Sep 2024 07:43 by ADMIN
Release 2024 Q4 (Nov)
In the csproj of my application, I have enabled support for nullable reference types (<Nullable>enable</Nullable>). If the filter operator is IsEqualTo the filtering will not match any items. 
Completed
Last Updated: 19 Sep 2024 17:25 by ADMIN
Release 2024 Q4 (Nov)

When filtering using a GridSearchBox - to filter across all columns, we have an issue where if you change a GridColumns Visible attribute to false that row will still be visible in the grid results even though it no longer matches the filter.

Take this snippet for example: Telerik REPL for Blazor - The best place to play, experiment, share & learn using Blazor.

1. Use Search box and search for a Name. e.g "Chang"

2. Click "Toggle Name Visibility" button

Expected: Since Name column is now hidden, the column should no longer be used in filter and the row should no longer be displayed. In reference to the GridSearchBox: https://docs.telerik.com/blazor-ui/components/grid/filter/searchbox#filter-from-code where it's mentioned that the search box will filter only on columns that are visible. It doesnt seem to refresh the filter.

Actual: Row still displayed even though it no longer matches filter

Just wanting to raise this as an issue and also hoping you may know a potential work-around for this?

A potential work-around I have tried is re-applying the existing filter in the search box by following documentation here in the "Filter From Code" section: https://docs.telerik.com/blazor-ui/components/grid/filter/searchbox#filter-from-code

While I am able to apply a filter from code I cannot seem to retrieve the value that is currently in the search box as I want to reuse it. How can I achieve this with a GridSearchBox? There doesnt seem to be a property available on the GridSearchBox component for binding it's value. Would I need to create a custom filter input to achieve this?

 

 

Completed
Last Updated: 19 Sep 2024 12:42 by ADMIN
Release 2024 Q4 (Nov)
When you click on the blank space under the rows inside a Grid with Incell editing, the OnUpdate does not fire.
Completed
Last Updated: 19 Sep 2024 12:37 by ADMIN
Release 2024 Q4 (Nov)

Disabling the LoaderContainer prevents the Incell edit mode to work as expected

<AdminEdit>

As a workaround, set the Navigable attribute to true.

</AdminEdit>

Completed
Last Updated: 19 Sep 2024 10:24 by ADMIN
Release 2024 Q4 (Nov)
Clicking the Escape key while the Grid SearchBox is focused and the Grid is hosted in a Window throws ObjectDisposedException
Completed
Last Updated: 13 Sep 2024 12:54 by ADMIN
Release 2024 Q4 (Nov)
Created by: Daniel
Comments: 0
Category: Grid
Type: Bug Report
1

I am trying to display a related virtual entity from an object in Grid. The List of objects is loaded using Entity Framework Core. I am certain that the related entities are loaded;

The transactions object that is returned ultimately to the TelerikGrid.Data definitely contain the related fields (checked with breakpoint).

Here is the grid I am using;

<TelerikGrid @ref="@SafexTransactionGrid" Data=@SafexContractTransactionGridData ConfirmDelete="true" Pageable="true" Groupable="true" Sortable="true" FilterMode="GridFilterMode.FilterMenu" Resizable="true" Reorderable="true" EditMode="GridEditMode.Popup" SelectionMode="GridSelectionMode.Multiple" PageSize="15" Navigable="true"> <GridColumns> ... <GridColumn Field="@nameof(SafexContractTransaction.Trader.Name)" Title="Trader Name" Editable="false"/> ... </GridColumns> </TelerikGrid> @code { private List<SafexContractTransaction> SafexContractTransactionGridData { get {

// returns all the data including populated Trader property

return FourtyTwoUnitOfWork.SafexContractTransactionRepo.GetAll(SafexContractGrid.SelectedItems);; } } } private TelerikGrid<SafexContractTransaction> SafexTransactionGrid { get; set; } }

Yet when the grid is displayed it does not contain the property. 

How can I solve this? 

Completed
Last Updated: 12 Sep 2024 13:42 by ADMIN
Release 2024 Q4 (Nov)
Use a Reorderable and Resizable Grid with more than one locked column, try to reorder the locked column then resize it. The position of the column is shifted to the right. This can be seen only if the scale factor of the display is more than 100%. The higher the scale factor, the more noticeable the bug (200%).
Completed
Last Updated: 12 Sep 2024 11:56 by ADMIN
Release 2024 Q4 (Nov)
When I autofit the width of any Grid column, the first one has null for Width when you GridRef.GetState()
Completed
Last Updated: 11 Sep 2024 10:21 by ADMIN
Release 2024 Q4 (Nov)

I have the foreign key issue that is described here:

https://docs.telerik.com/blazor-ui/knowledge-base/grids-foreign-key 

I am working with your grid and trying to implement the filter template. I am using the sample code on this page under the section Filter Menu Template:

https://docs.telerik.com/blazor-ui/components/grid/templates/filter 

For the text to display I want to use a List of objects that have 2 properties: an id and a text to display.

I have used the grouping header template and the editor template successfully with the foreign key.


My issue with the filter template is as follows:

1. Run the attached project

2. drop down the list

3. select one item

4. press Filter  (this works fine)

5. drop down the list

6. unselect the selected field

7. press Filter  (this does not work – the list is still filtered)

Completed
Last Updated: 11 Sep 2024 10:20 by ADMIN
Release 2024 Q4 (Nov)

I have enabled the Column Menu and I am using a Filter Menu Template with only one TextBox. With this setup I am able to only type one letter before the Filter Context is reset.

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

Completed
Last Updated: 11 Sep 2024 10:20 by ADMIN
Release 2024 Q4 (Nov)

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.

Completed
Last Updated: 11 Sep 2024 10:20 by ADMIN
Release 2024 Q4 (Nov)

Consider this test page: https://blazorrepl.telerik.com/cSEQOTQY53LRL4je36

  1. Check some checkboxes for the Name column and click on the Filter button. This works as expected.
  2. Uncheck all checkboxes in the Name column checkbox list and click on the Filter button again. This time, the previously checked checkboxes remain checked and the filters remain applied.

This happens only when using a column menu - ShowColumnMenu="true".

===

A possible workaround is to use a FilterButtonsTemplate and clear the filters programmatically if the filter descriptor is empty:

@using Telerik.DataSource
@using Telerik.DataSource.Extensions
 
<TelerikGrid TItem="@Employee"
             OnRead="@OnReadHandler"
             Pageable="true"
             FilterMode="@GridFilterMode.FilterMenu"
             FilterMenuType="@FilterMenuType.CheckBoxList"
             ShowColumnMenu="true"
             Height="400px">
    <GridColumns>
        <GridColumn Field="@(nameof(Employee.EmployeeId))" Filterable="false" />
        <GridColumn Field="@nameof(Employee.Name)">
            <FilterMenuTemplate Context="context">
                <TelerikCheckBoxListFilter Data="@NameOptions"
                                           Field="@(nameof(NameFilterOption.Name))"
                                           @bind-FilterDescriptor="@context.FilterDescriptor">
                </TelerikCheckBoxListFilter>
            </FilterMenuTemplate>
            <FilterMenuButtonsTemplate Context="filterContext">
                <TelerikButton OnClick="@( async () => await ApplyFilterAsync(filterContext) )"
                               ThemeColor="primary">Filter</TelerikButton>
                <TelerikButton OnClick="@( async () => await ClearFilterAsync(filterContext) )">Clear</TelerikButton>
            </FilterMenuButtonsTemplate>
        </GridColumn>
        <GridColumn Field="@nameof(Employee.Team)" Title="Team">
            <FilterMenuTemplate Context="context">
                <TelerikCheckBoxListFilter Data="@TeamsList"
                                           Field="@(nameof(TeamNameFilterOption.Team))"
                                           @bind-FilterDescriptor="@context.FilterDescriptor">
                </TelerikCheckBoxListFilter>
            </FilterMenuTemplate>
        </GridColumn>
        <GridColumn Field="@nameof(Employee.IsOnLeave)" Title="On Vacation" />
    </GridColumns>
</TelerikGrid>

@code {
    List<Employee> AllGridData { get; set; }

    #region custom-filter-data
    List<TeamNameFilterOption> TeamsList { get; set; }
    List<NameFilterOption> NameOptions { get; set; }

    private async Task ApplyFilterAsync(FilterMenuTemplateContext filterContext)
    {
        var hasFilters = filterContext.FilterDescriptor.FilterDescriptors.OfType<FilterDescriptor>().Any(x => !string.IsNullOrEmpty(x.Value.ToString()));

        if (hasFilters)
        {
            await filterContext.FilterAsync();
        }
        else
        {
            await filterContext.ClearFilterAsync();
        }
    }

    private async Task ClearFilterAsync(FilterMenuTemplateContext filterContext)
    {
        await filterContext.ClearFilterAsync();
    }

    //obtain filter lists data from the data source to show all options
    async Task GetTeamOptions()
    {
        if (TeamsList == null) // sample of caching since we always want all distinct options,
                               //but we don't want to make unnecessary requests
        {
            TeamsList = await GetNamesFromService();
        }
    }

    async Task<List<TeamNameFilterOption>> GetNamesFromService()
    {
        await Task.Delay(500);// simulate a real service delay

        // this is just one example of getting distinct values from the full data source
        // in a real case you'd probably call your data service here instead
        // or apply further logic (such as tie the returned data to the data the grid will have according to your business logic)
        List<TeamNameFilterOption> data = AllGridData.OrderBy(z => z.Team).Select(z => z.Team).
            Distinct().Select(t => new TeamNameFilterOption { Team = t }).ToList();

        return await Task.FromResult(data);
    }

    async Task GetNameOptions()
    {
        if (NameOptions == null)
        {
            NameOptions = await GetNameOptionsFromService();
        }
    }

    async Task<List<NameFilterOption>> GetNameOptionsFromService()
    {
        await Task.Delay(500);// simulate a real service delay

        List<NameFilterOption> data = AllGridData.OrderBy(z => z.Name).Select(z => z.Name).
            Distinct().Select(n => new NameFilterOption { Name = n }).ToList();

        return await Task.FromResult(data);
    }
    #endregion custom-filter-data

    async Task OnReadHandler(GridReadEventArgs args)
    {
        //typical data retrieval for the grid
        var filteredData = await AllGridData.ToDataSourceResultAsync(args.Request);
        args.Data = filteredData.Data as IEnumerable<Employee>;
        args.Total = filteredData.Total;
    }

    protected override async Task OnInitializedAsync()
    {
        AllGridData = new List<Employee>();
        var rand = new Random();
        for (int i = 1; i <= 15; i++)
        {
            AllGridData.Add(new Employee()
            {
                EmployeeId = i,
                Name = "Employee " + i.ToString(),
                Team = "Team " + i % 3,
                IsOnLeave = i % 2 == 0
            });
        }

        await GetTeamOptions();
        await GetNameOptions();
    }

    public class Employee
    {
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public string Team { get; set; }
        public bool IsOnLeave { get; set; }
    }

    // in this sample we use simplified models to fetch less data from the service
    // instead of using the full Employee model that has many fields we do not need for the filters

    public class TeamNameFilterOption
    {
        public string Team { get; set; }
    }

    public class NameFilterOption
    {
        public string Name { get; set; }
    }
}

Completed
Last Updated: 10 Sep 2024 10:30 by ADMIN
Release 2024 Q4 (Nov)

When using the TelerikCheckBoxListFilter component in a FilterMenuTemplate, it does render a checkbox with a blank label, but selecting it does not generate a filter descriptor.

For reference, the built-in CheckBoxList filtering correctly filters null values.

1 2 3 4 5 6