Completed
Last Updated: 27 Apr 2022 12:24 by ADMIN
Release 3.3.0
Rick
Created on: 17 Feb 2021 09:34
Category: Grid
Type: Feature Request
2
Cannot toggle Groupable at runtime

My grid starts with Groupable=false and at some point I may need to make it groupable. The group panel appears, but I cannot drag the column headers to it to actually group.

---

ADMIN EDIT

A workaround is to hide the grid so it can re-initialize with the new groupable setting:

Is Groupable: @IsGroupable
<TelerikButton OnClick="@ToggleGroupable">Toggle Groupable</TelerikButton>

@if (isGridVisible)
{
    <TelerikGrid Data=@GridData @ref="@GridRef" Groupable="@IsGroupable" Pageable="true" Height="400px">
        <GridColumns>
            <GridColumn Field=@nameof(Employee.Name) Groupable="false" />
            <GridColumn Field=@nameof(Employee.Team) Title="Team" />
            <GridColumn Field=@nameof(Employee.IsOnLeave) Title="On Vacation" />
        </GridColumns>
    </TelerikGrid>
}

@code {
    bool IsGroupable { get; set; }
    bool isGridVisible { get; set; } = true;
    TelerikGrid<Employee> GridRef { get; set; }
    async Task ToggleGroupable()
    {
        //save state (sorting, paging,...) - it will be lost when we hide the grid
        var state = GridRef.GetState();

        //hide the grid so it can later re-initialize with the new groupable setting
        isGridVisible = false;
        await InvokeAsync(StateHasChanged);
        await Task.Delay(20);
        IsGroupable = !IsGroupable;
        isGridVisible = true;

        //afte the grid re-initialized and rendered with the new setting, restore its state
        await InvokeAsync(StateHasChanged);
        await Task.Delay(20);
        await GridRef.SetState(state);
    }


    public List<Employee> GridData { get; set; }

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

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

---

0 comments