Radzengrid way too slow when bound to collection and displaying elements as content #578

Closed
opened 2026-01-29 17:39:41 +00:00 by claunia · 1 comment
Owner

Originally created by @yarex007 on GitHub (Oct 13, 2022).

**Grid is bound to collection of EventTenants with some basic properties.
Even if i replace inner grid with foreach and display elements inside, performance is really slow.

Outer collection has 6 and inner collection has 50 elements, so total around 300.

UPDATE - the problem is also when i try to set all rows to edit mode using RowRender. That call takes waaay too much time to switch all rows to edit mode.

protected void RowRender(RowRenderEventArgs<TenantJsonDto> args)
{
    _tenantGrid.EditRow(args.Data);
}

`<RadzenDataGrid @ref="_dataGrid"
EditMode="DataGridEditMode.Single"
TItem="BackOfficeEventTenantDto"
Data="@EventTenants"
RowExpand="@OnExpandRow"
RowCollapse="@OnCollapseRow"
ExpandMode="DataGridExpandMode.Single"
AllowColumnResize="true"
AllowFiltering="false"
FilterMode="FilterMode.Simple"
FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive"
AllowSorting="true"
AllowMultiColumnSorting="true">

        <!-- Row expand template -->
        <Template Context="eventTenant">
            <RadzenCard class="mt-1">
                <RadzenCard class="mt-1">
                    <div>
                        <h4 class="align-self-center mb-0 ml-1">@StringExtensions.GetSpacedString(eventTenant.EventType.ToString("g"))</h4>
                    </div>
                    <div class="text-wrap">@GetEventsAsString(eventTenant.EventType)</div>
                </RadzenCard>

                <div class="mb-1">
                    <div class="row">
                        <div class="col-10"></div>
                        <div class="col-2">
                            <RadzenButton Icon="save"
                                          Size="ButtonSize.Medium"
                                          Click="@(_ => OnSaveEventsAsync(eventTenant))"
                                          Disabled="IsSaveButtonBusy"
                                          IsBusy="IsSaveButtonBusy"
                                          class="ori-primary float-right mb-1">
                            </RadzenButton>
                        </div>
                    </div>
                </div>

                <RadzenDataGrid @ref="_tenantGrid"
                                EditMode="DataGridEditMode.Multiple"
                                TItem="TenantJsonDto"
                                Data="@(EventTenants.First(p=>p.EventType == eventTenant.EventType).TenantsJson)"
                                ExpandMode="DataGridExpandMode.Multiple"
                                AllowColumnResize="true"
                                AllowFiltering="false"
                                AllowSorting="false"
                                AllowMultiColumnSorting="false">
                    <Columns>
                        <RadzenDataGridColumn TItem="TenantJsonDto"
                                              Property="@nameof(TenantJsonDto.TenantId)"
                                              Title="@nameof(TenantJsonDto.TenantId)"
                                              Sortable="false">
                            <Template Context="tenant">
                                @tenant.TenantId
                            </Template>
                        </RadzenDataGridColumn>

                        <RadzenDataGridColumn TItem="TenantJsonDto"
                                              Property="@nameof(TenantJsonDto.IsActive)"
                                              Title="@StringExtensions.GetSpacedString(nameof(TenantJsonDto.IsActive))"
                                              Sortable="false">
                            <Template Context="tenant">
                                <div class="row">
                                    <div class="col-12 d-flex flex-row">
                                        <RadzenSwitch @bind-Value="@tenant.IsActive"/>
                                    </div>
                                </div>
                            </Template>
                        </RadzenDataGridColumn>

                        <RadzenDataGridColumn TItem="TenantJsonDto"
                                              Property="@nameof(TenantJsonDto.ValidFrom)"
                                              Title="@StringExtensions.GetSpacedString(nameof(TenantJsonDto.ValidFrom))"
                                              Sortable="false">
                            <Template Context="tenant">
                                <RadzenDatePicker @bind-Value="tenant.ValidFrom"
                                                  DateFormat="d"
                                                  Name="@nameof(tenant.ValidFrom)"
                                                  Style="width: 100%;"/>
                            </Template>
                        </RadzenDataGridColumn>

                        <RadzenDataGridColumn TItem="TenantJsonDto"
                                              Property="@nameof(TenantJsonDto.ValidTo)"
                                              Title="@StringExtensions.GetSpacedString(nameof(TenantJsonDto.ValidTo))"
                                              Sortable="false">
                            <Template Context="tenant">
                                <RadzenDatePicker @bind-Value="tenant.ValidTo"
                                                  DateFormat="d"
                                                  Name="@nameof(tenant.ValidTo)"
                                                  Style="width: 100%;"/>
                            </Template>
                        </RadzenDataGridColumn>
                    </Columns>
                </RadzenDataGrid>
            </RadzenCard>
        </Template>

        <Columns>
            <RadzenDataGridColumn TItem="BackOfficeEventTenantDto"
                                  Property="@nameof(BackOfficeEventTenantDto.EventType)"
                                      Title="@StringExtensions.GetSpacedString(nameof(BackOfficeEventTenantDto.EventType))"
                                  Sortable="false"
                                  Width="125px">
                <Template Context="eventTenant">
                    @eventTenant.EventType
                </Template>
            </RadzenDataGridColumn>

                <RadzenDataGridColumn TItem="BackOfficeEventTenantDto"
                                  Property="@nameof(BackOfficeEventTenantDto.TenantsJson)"
                                  Title="Active Tenants"
                                  Sortable="false">
                <Template Context="eventTenant">
                    @string.Join(",", eventTenant.TenantsJson.Where(p => p.IsActive).Select(p => p.TenantId))
                </Template>
            </RadzenDataGridColumn>
        </Columns>
    </RadzenDataGrid>`

[Parameter]
public List EventTenants { get; set; }

Originally created by @yarex007 on GitHub (Oct 13, 2022). **Grid is bound to collection of EventTenants with some basic properties. Even if i replace inner grid with foreach and display elements inside, performance is really slow. Outer collection has 6 and inner collection has 50 elements, so total around 300. *UPDATE* - the problem is also when i try to set all rows to edit mode using RowRender. That call takes waaay too much time to switch all rows to edit mode. protected void RowRender(RowRenderEventArgs<TenantJsonDto> args) { _tenantGrid.EditRow(args.Data); } `<RadzenDataGrid @ref="_dataGrid" EditMode="DataGridEditMode.Single" TItem="BackOfficeEventTenantDto" Data="@EventTenants" RowExpand="@OnExpandRow" RowCollapse="@OnCollapseRow" ExpandMode="DataGridExpandMode.Single" AllowColumnResize="true" AllowFiltering="false" FilterMode="FilterMode.Simple" FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive" AllowSorting="true" AllowMultiColumnSorting="true"> <!-- Row expand template --> <Template Context="eventTenant"> <RadzenCard class="mt-1"> <RadzenCard class="mt-1"> <div> <h4 class="align-self-center mb-0 ml-1">@StringExtensions.GetSpacedString(eventTenant.EventType.ToString("g"))</h4> </div> <div class="text-wrap">@GetEventsAsString(eventTenant.EventType)</div> </RadzenCard> <div class="mb-1"> <div class="row"> <div class="col-10"></div> <div class="col-2"> <RadzenButton Icon="save" Size="ButtonSize.Medium" Click="@(_ => OnSaveEventsAsync(eventTenant))" Disabled="IsSaveButtonBusy" IsBusy="IsSaveButtonBusy" class="ori-primary float-right mb-1"> </RadzenButton> </div> </div> </div> <RadzenDataGrid @ref="_tenantGrid" EditMode="DataGridEditMode.Multiple" TItem="TenantJsonDto" Data="@(EventTenants.First(p=>p.EventType == eventTenant.EventType).TenantsJson)" ExpandMode="DataGridExpandMode.Multiple" AllowColumnResize="true" AllowFiltering="false" AllowSorting="false" AllowMultiColumnSorting="false"> <Columns> <RadzenDataGridColumn TItem="TenantJsonDto" Property="@nameof(TenantJsonDto.TenantId)" Title="@nameof(TenantJsonDto.TenantId)" Sortable="false"> <Template Context="tenant"> @tenant.TenantId </Template> </RadzenDataGridColumn> <RadzenDataGridColumn TItem="TenantJsonDto" Property="@nameof(TenantJsonDto.IsActive)" Title="@StringExtensions.GetSpacedString(nameof(TenantJsonDto.IsActive))" Sortable="false"> <Template Context="tenant"> <div class="row"> <div class="col-12 d-flex flex-row"> <RadzenSwitch @bind-Value="@tenant.IsActive"/> </div> </div> </Template> </RadzenDataGridColumn> <RadzenDataGridColumn TItem="TenantJsonDto" Property="@nameof(TenantJsonDto.ValidFrom)" Title="@StringExtensions.GetSpacedString(nameof(TenantJsonDto.ValidFrom))" Sortable="false"> <Template Context="tenant"> <RadzenDatePicker @bind-Value="tenant.ValidFrom" DateFormat="d" Name="@nameof(tenant.ValidFrom)" Style="width: 100%;"/> </Template> </RadzenDataGridColumn> <RadzenDataGridColumn TItem="TenantJsonDto" Property="@nameof(TenantJsonDto.ValidTo)" Title="@StringExtensions.GetSpacedString(nameof(TenantJsonDto.ValidTo))" Sortable="false"> <Template Context="tenant"> <RadzenDatePicker @bind-Value="tenant.ValidTo" DateFormat="d" Name="@nameof(tenant.ValidTo)" Style="width: 100%;"/> </Template> </RadzenDataGridColumn> </Columns> </RadzenDataGrid> </RadzenCard> </Template> <Columns> <RadzenDataGridColumn TItem="BackOfficeEventTenantDto" Property="@nameof(BackOfficeEventTenantDto.EventType)" Title="@StringExtensions.GetSpacedString(nameof(BackOfficeEventTenantDto.EventType))" Sortable="false" Width="125px"> <Template Context="eventTenant"> @eventTenant.EventType </Template> </RadzenDataGridColumn> <RadzenDataGridColumn TItem="BackOfficeEventTenantDto" Property="@nameof(BackOfficeEventTenantDto.TenantsJson)" Title="Active Tenants" Sortable="false"> <Template Context="eventTenant"> @string.Join(",", eventTenant.TenantsJson.Where(p => p.IsActive).Select(p => p.TenantId)) </Template> </RadzenDataGridColumn> </Columns> </RadzenDataGrid>` [Parameter] public List<BackOfficeEventTenantDto> EventTenants { get; set; }
Author
Owner

@enchev commented on GitHub (Oct 14, 2022):

I'm afraid that we cannot run your code. When submitting an issue please make sure you are using minimal repro example that we can run.

@enchev commented on GitHub (Oct 14, 2022): I'm afraid that we cannot run your code. When submitting an issue please make sure you are using minimal repro example that we can run.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/radzen-blazor#578