AG-Grid服务端搜索总行数始终固定为50,successCallback中lastRow参数不生效问题
我来帮你梳理这个问题,你遇到的lastRow参数无法改变总行数的情况,大概率是这几个环节出了问题,咱们一步步排查:
1. 先确认后端返回的lastRow值是否正确
先从最基础的环节入手:在ServerSideService.ts的subscribe回调里加个日志,看看后端实际返回的lastRow是不是你预期的数值:
.subscribe( (res) => { console.log('后端返回的总条数:', res.lastRow); // 加这行日志 params.successCallback(res.data,res.lastRow); }, (err) => params.fail(), );
如果打印出来的数值一直是50,那问题出在后端——后端的搜索条件没正确应用到总条数的统计逻辑上,比如搜索参数没传递到计数SQL里,导致一直返回默认的50条总数。
2. 检查请求参数是否正确传递给后端
在getRows方法中,AG-Grid会通过params对象传递当前的分页、过滤、排序参数(比如params.startRow、params.endRow、params.filterModel),你需要把这些参数完整传递给后端,后端才能返回对应搜索条件下的正确总条数。
看你代码里的request对象,有没有包含AG-Grid的搜索过滤参数?比如应该这样构建请求:
const request = { startRow: params.startRow, endRow: params.endRow, filterModel: params.filterModel, // 把搜索过滤参数传给后端 sortModel: params.sortModel // 如果有排序需求也带上 };
如果request里没带搜索条件,后端就会一直返回默认数据集的总条数50。
3. 修正AG-Grid的Server-Side模式配置
你的gridOptions有个潜在问题:在Server-Side模式下,不要手动设置rowData: [],这个属性会干扰AG-Grid对服务端数据的感知,导致总行数计算异常。
修改后的gridOptions可以调整成这样:
this.gridOptions = { rowModelType: "serverSide", paginationPageSize: this.pageSize, cacheBlockSize: this.pageSize, rowSelection: "single", suppressRowClickSelection: true, pagination: true, columnDefs: [], headerHeight: 35 // 删掉rowData: [] };
另外还要检查有没有额外配置infiniteInitialRowCount属性,如果有,一定要删掉——这个属性会强制AG-Grid用固定值作为初始总行数,忽略后端返回的lastRow。
4. 搜索时要刷新Server-Side数据源
当你执行搜索操作时,不要只重新调用setDataSource,应该调用AG-Grid的refreshServerSideStore方法触发全新的请求,这样AG-Grid才会重新获取包含新搜索条件的总行数:
// 假设你的搜索方法是onSearch onSearch() { // purge: true 会清空缓存,强制重新请求数据 this.gridApi.refreshServerSideStore({ purge: true }); }
5. 检查AG-Grid版本是否存在已知Bug
如果以上步骤都排查完还是没解决,可能是你使用的AG-Grid版本存在lastRow处理的逻辑Bug。建议升级到最新的稳定版本试试,AG-Grid对Server-Side Row Model的迭代比较频繁,旧版本的一些问题在新版本中已经修复。
内容的提问来源于stack exchange,提问作者Denna Aliyene

