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!
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>
}

