How to collapse datagridview radzen using code

Viewed 30

I'm using radzen datagrid view and I've managed to make the radzen datagrid view expand but I don't know how to make all the hierarchy collapse. The code is a nested datagrid view so it probably needs all the rows collapsed. Thanks for your time!

Expanded view (current): Expanded view (current):

Collapsed view (ideal): Collapsed view (ideal):

SkillOverviewPage.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using Radzen;
using Radzen.Blazor;
using SkillMatrix.APIModels.Models;
using SkillMatrix.Client.Services.Interfaces;

namespace SkillMatrix.Client.Features.SkillView
{
    public partial class SkillOverviewPage
    {
        #region protected properties
        protected RadzenDataGrid<SkillResponse> OuterGrid;
        protected IEnumerable<SkillResponse> Skills { get; set; }
        protected IEnumerable<string> SkillNames { get; set; }
        protected IEnumerable<string> SkillCategoryNames { get; set; }
        protected IEnumerable<string> SelectedSkillNames { get; set; }
        protected IEnumerable<string> SelectedSkillCategoryNames { get; set; }
        [Inject]
        protected ISkillDataService SkillDataService { get; set; }

        [Inject]
        protected ISkillCategoryDataService SkillCategoryDataService { get; set; }

        [Inject]
        public NavigationManager NavigationManager { get; set; }

        #endregion

        #region protected methods
        protected override async Task OnInitializedAsync()
        {
            Skills = await SkillDataService.GetSkillsAsync();

            foreach (var skill in Skills)
            {
                skill.SkillCategory = await SkillCategoryDataService.GetSkillCategoryAsync(skill.SkillCategoryId);
            }

            SkillCategoryNames = Skills.Select(c => c.SkillCategory.Name).Distinct();

            SkillNames = Skills.Select(c => c.Name);
        }

        protected void NavigateToDetailPage(SkillResponse skill)
        {
            NavigationManager.NavigateTo($"skilldetail/{skill.Id}");
        }

        protected void NavigateToEditPage(SkillResponse skill)
        {
            NavigationManager.NavigateTo($"skilledit/{skill.Id}");
        }
        protected void OnRender(DataGridRenderEventArgs<SkillResponse> args)
        {
            if (args.FirstRender)
            {
                args.Grid.Groups.Add(new GroupDescriptor() { Property = "Name", SortOrder = SortOrder.Descending });
                args.Grid.Groups.Add(new GroupDescriptor() { Property = "Employees.Count", SortOrder = SortOrder.Descending });

                args.Grid.ExpandRow(args.Grid.View.FirstOrDefault());
                
                StateHasChanged();
            }
        }

        protected void OnSelectedSkillNamesChange(object value)
        {
            if (SelectedSkillNames != null && !SelectedSkillNames.Any())
            {
                SelectedSkillNames = null;
            }
        }
        protected void OnSelectedSkillCategoryNamesChange(object value)
        {
            if (SelectedSkillCategoryNames != null && !SelectedSkillCategoryNames.Any())
            {
                SelectedSkillCategoryNames = null;
            }
        }

        #endregion
    }
}

SkillOverViewPage.razor:

@page "/skilloverview"
@using SkillMatrix.APIModels.Models

<h1 class="page-title">Skills</h1>

@if (Skills == null)
{
    <p><em>Loading ...</em></p>
}
else
{
    <RadzenDataGrid AllowGrouping="true" AllowFiltering="true" AllowColumnResize="true" FilterMode="FilterMode.Simple" HideGroupedColumn="true"
                AllowPaging="true" PageSize="10" AllowSorting="true" Data="@Skills" @ref="OuterGrid" TItem="SkillResponse" 
                 FilterOperator="FilterOperator.Contains" LogicalFilterOperator="LogicalFilterOperator.And" 
                 Render="@OnRender">
        <Columns>
            <RadzenDataGridColumn TItem="SkillResponse" TextAlign="TextAlign.Left" Property="@nameof(SkillResponse.Id)" Title="Skill ID" Width="120px" />

            <RadzenDataGridColumn TItem="SkillResponse" Property="SkillCategory.Name" Title="SkillCategory" Width="auto"
                              Type="typeof(IEnumerable<string>)" FilterValue="@SelectedSkillCategoryNames" FilterOperator="FilterOperator.Contains"
                              LogicalFilterOperator="LogicalFilterOperator.Or">
                <FilterTemplate>
                    <RadzenDropDown @bind-Value=@SelectedSkillCategoryNames Style="width:100%;"
                                Change=@OnSelectedSkillCategoryNamesChange Data="@SkillCategoryNames" AllowClear="true" Multiple="true" />
                </FilterTemplate>
            </RadzenDataGridColumn>



            <RadzenDataGridColumn TItem="SkillResponse" Property="Name" Title="Skill" Width="auto"
                              Type="typeof(IEnumerable<string>)" FilterValue="@SelectedSkillNames" FilterOperator="FilterOperator.Contains"
                              LogicalFilterOperator="LogicalFilterOperator.Or">
                <FilterTemplate>
                    <RadzenDropDown @bind-Value=@SelectedSkillNames Style="width:100%;"
                                Change=@OnSelectedSkillNamesChange Data="@SkillNames" AllowClear="true" Multiple="true" />
                </FilterTemplate>
            </RadzenDataGridColumn>

            <RadzenDataGridColumn TItem="SkillResponse" Property="Description" Title="Skill Description" Width="auto" />
            <RadzenDataGridColumn TItem="SkillResponse" Property="SkillCategory.Description" Title="SkillCategory Description" Width="auto" />

            <RadzenDataGridColumn TItem="SkillResponse" Property="Employees.Count" Title="Employees Count" Width="auto" />
            <RadzenDataGridColumn TItem="SkillResponse" Width="100px">
                <Template Context="selected">
                    <RadzenButton Icon="info" ButtonStyle="ButtonStyle.Info" Click=@(() => NavigateToDetailPage(selected)) />
                    <RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Click=@(() => NavigateToEditPage(selected)) />
                </Template>
            </RadzenDataGridColumn>
        </Columns>

        <Template Context="skill">
            <RadzenDataGrid AllowFiltering="true" AllowPaging="true" PageSize="10" AllowSorting="true"
                        Data="@skill.EmployeeSkills" TItem="EmployeeSkillResponse">
                <Columns>
                    <RadzenDataGridColumn TItem="EmployeeSkillResponse" Property="employeeSkill.Employee.FirstName" Title="First Name" Width="auto" />
                    <RadzenDataGridColumn TItem="EmployeeSkillResponse" Property="employeeSkill.Employee.LastName" Title="Last Name" Width="auto" />
                    <RadzenDataGridColumn TItem="EmployeeSkillResponse" Property="employeeSkill.Employee.Email" Title="Email" Width="auto" />
                    <RadzenDataGridColumn TItem="EmployeeSkillResponse" Property="employeeSkill.Level" Title="Level" Width="auto" />
                </Columns>
            </RadzenDataGrid>
        </Template>
    </RadzenDataGrid>
}
0 Answers
Related