From 3818d0e607a3e2b88b3012fae898d19dab70e5eb Mon Sep 17 00:00:00 2001 From: Jeffrey van der Stad Date: Sat, 5 Apr 2025 23:21:16 +1030 Subject: [PATCH] PR: Add `PagingSummaryTemplate` to `RadzenDataGrid` (Fixes [#2077](https://github.com/radzenhq/radzen-blazor/issues/2077)) (#2079) * fix: added PagingSummaryTemplate as replacement for PagingSummaryFormat * In `DataGridPagerApi.razor`, added a `PagingSummaryTemplate` within the `RadzenDataGrid` component to provide a visual summary of the current page and total records displayed. --- Radzen.Blazor/PagedDataBoundComponent.cs | 12 ++++++++++++ Radzen.Blazor/PagingInformation.cs | 10 ++++++++++ Radzen.Blazor/RadzenDataGrid.razor | 4 ++-- Radzen.Blazor/RadzenDataList.razor | 4 ++-- Radzen.Blazor/RadzenPager.razor | 15 ++++++++++++--- Radzen.Blazor/RadzenPager.razor.cs | 12 ++++++++++++ RadzenBlazorDemos/Pages/DataGridPagerApi.razor | 7 +++++-- 7 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 Radzen.Blazor/PagingInformation.cs diff --git a/Radzen.Blazor/PagedDataBoundComponent.cs b/Radzen.Blazor/PagedDataBoundComponent.cs index 1a02abb5..f0174bee 100644 --- a/Radzen.Blazor/PagedDataBoundComponent.cs +++ b/Radzen.Blazor/PagedDataBoundComponent.cs @@ -190,9 +190,21 @@ namespace Radzen /// Gets or sets the pager summary format. /// /// The pager summary format. + /// + /// has preference + /// [Parameter] public string PagingSummaryFormat { get; set; } = "Page {0} of {1} ({2} items)"; +#nullable enable + /// + /// Gets or sets the pager summary template. + /// + /// Has preference over + [Parameter] + public RenderFragment? PagingSummaryTemplate { get; set; } +#nullable restore + /// /// Gets or sets the pager's first page button's title attribute. /// diff --git a/Radzen.Blazor/PagingInformation.cs b/Radzen.Blazor/PagingInformation.cs new file mode 100644 index 00000000..3baa38c9 --- /dev/null +++ b/Radzen.Blazor/PagingInformation.cs @@ -0,0 +1,10 @@ +namespace Radzen.Blazor +{ + /// + /// Represents paging information. + /// + /// The current page number. + /// The total number of pages. + /// The total count of items. + public record PagingInformation(int CurrentPage, int NumberOfPages, int TotalCount); +} diff --git a/Radzen.Blazor/RadzenDataGrid.razor b/Radzen.Blazor/RadzenDataGrid.razor index 65231f47..845d32b8 100644 --- a/Radzen.Blazor/RadzenDataGrid.razor +++ b/Radzen.Blazor/RadzenDataGrid.razor @@ -78,7 +78,7 @@ } @if (AllowPaging && PagerPosition.HasFlag(PagerPosition.Top)) { - + }
@@ -284,7 +284,7 @@ @if (AllowPaging && PagerPosition.HasFlag(PagerPosition.Bottom)) { - + } @if (@FooterTemplate != null) { diff --git a/Radzen.Blazor/RadzenDataList.razor b/Radzen.Blazor/RadzenDataList.razor index a7769885..07a4cb88 100644 --- a/Radzen.Blazor/RadzenDataList.razor +++ b/Radzen.Blazor/RadzenDataList.razor @@ -6,7 +6,7 @@
@if (AllowPaging && PagerPosition.HasFlag(PagerPosition.Top)) { - + } @if (Data != null) { @@ -51,7 +51,7 @@ } @if (AllowPaging && PagerPosition.HasFlag(PagerPosition.Bottom)) { - + }
} diff --git a/Radzen.Blazor/RadzenPager.razor b/Radzen.Blazor/RadzenPager.razor index cb10e2f1..9056e016 100644 --- a/Radzen.Blazor/RadzenPager.razor +++ b/Radzen.Blazor/RadzenPager.razor @@ -2,11 +2,20 @@ @if (GetVisible()) {
+ @onkeydown="@OnKeyDown" @onkeydown:preventDefault="preventKeyDown" @onkeydown:stopPropagation="true" tabindex=0 + @onfocus=@OnFocus> @if(ShowPagingSummary) { - @(string.Format(PagingSummaryFormat, CurrentPage + 1, numberOfPages, Count)) + + @if (PagingSummaryTemplate != null) + { + @PagingSummaryTemplate(new(CurrentPage + 1, numberOfPages, Count)) + } + else + { + @(string.Format(PagingSummaryFormat, CurrentPage + 1, numberOfPages, Count)) + } + } diff --git a/Radzen.Blazor/RadzenPager.razor.cs b/Radzen.Blazor/RadzenPager.razor.cs index 7268dd9f..28f1a50c 100644 --- a/Radzen.Blazor/RadzenPager.razor.cs +++ b/Radzen.Blazor/RadzenPager.razor.cs @@ -163,9 +163,21 @@ namespace Radzen.Blazor /// Gets or sets the pager summary format. /// /// The pager summary format. + /// + /// has preference + /// [Parameter] public string PagingSummaryFormat { get; set; } = "Page {0} of {1} ({2} items)"; +#nullable enable + /// + /// Gets or sets the pager summary template. + /// + /// Has preference over + [Parameter] + public RenderFragment? PagingSummaryTemplate { get; set; } +#nullable restore + /// /// Gets or sets the page numbers count. /// diff --git a/RadzenBlazorDemos/Pages/DataGridPagerApi.razor b/RadzenBlazorDemos/Pages/DataGridPagerApi.razor index 34013c8d..75527b6e 100644 --- a/RadzenBlazorDemos/Pages/DataGridPagerApi.razor +++ b/RadzenBlazorDemos/Pages/DataGridPagerApi.razor @@ -18,7 +18,11 @@ + PageSizeOptions="@pageSizeOptions" ShowPagingSummary="@showPagerSummary" Page="@OnPage"> + + + Displaying page @context.CurrentPage of @context.NumberOfPages (total @context.TotalCount records) + @@ -38,7 +42,6 @@ @code { - string pagingSummaryFormat = "Displaying page {0} of {1} (total {2} records)"; RadzenDataGrid dataGrid; IEnumerable pageSizeOptions = new int[] { 10, 20, 30 };