Blazor Server下Syncfusion DataGrid服务端分页无法正确显示总页数
解决Syncfusion Blazor Grid分页页码显示不正确的问题
问题根源分析
你的代码存在两个核心问题导致分页显示异常:
- PageCount计算逻辑错误:当前的计算公式不符合分页页码的数学逻辑,得出了错误的总页数。
- Syncfusion Grid未获取总记录数:Grid需要知道数据库中设备的总条数才能正确渲染分页控件的页码数量,你没有给
GridPageSettings绑定TotalRecordsCount属性。
具体修复步骤
1. 修正PageCount计算逻辑
替换OnInitializedAsync中的PageCount计算代码:
原错误代码:
PageCount = (totalCount % PageSize) > 0 ? (totalCount / PageSize) - totalCount % PageSize : totalCount / PageSize;
改为以下两种正确方式之一:
// 方式一:整数运算实现向上取整 PageCount = totalCount % PageSize == 0 ? totalCount / PageSize : totalCount / PageSize + 1; // 方式二:用Math.Ceiling更简洁直观 PageCount = (int)Math.Ceiling((double)totalCount / PageSize);
2. 给Grid分页设置绑定总记录数
修改GridPageSettings标签,添加TotalRecordsCount绑定:
<GridPageSettings PageSize="@PageSize" PageCount="@PageCount" TotalRecordsCount="@totalCount"></GridPageSettings>
这一步让Grid明确知晓总数据量,从而正确计算并展示分页页码。
3. 处理分页切换事件,加载对应页数据
在SfGrid标签中添加OnPageChanged事件监听,用于用户切换页码时加载对应页的数据:
<SfGrid @ref="DefaultGrid" DataSource="@Equipments" EnableRtl="true" class="table-eq" AllowResizing="true" AllowSorting="true" AllowFiltering="true" AllowPaging="true" Height="@TableHeight.ToString()" OnPageChanged="OnPageChanged">
然后在@code块中添加事件处理方法:
private async Task OnPageChanged(PageChangedEventArgs args) { CurrentPage = args.CurrentPage; // 加载当前选中页的数据 Equipments = await equipmentServices.GetPagedEquipmentsData(CurrentPage, PageSize); // 通知组件刷新UI StateHasChanged(); }
4. 优化异步调用(可选但推荐)
在OnInitializedAsync中无需用Task.Run包装异步方法调用,直接await即可:
protected override async Task OnInitializedAsync() { totalCount = await equipmentServices.GetTotalEquipmentsCount(); Equipments = await equipmentServices.GetPagedEquipmentsData(CurrentPage, PageSize); PageCount = (int)Math.Ceiling((double)totalCount / PageSize); }
5. 验证总记录数获取方法
确保GetTotalEquipmentsCount方法正确返回数据库中所有设备的总条数,若后续添加过滤条件,需同步更新该方法与分页逻辑。
完成以上修改后,Grid就能正确显示总页数,且切换页码时会加载对应的数据。
内容的提问来源于stack exchange,提问作者Alex Wright
相关产品推荐
相关产品推荐

