带分页的igx-grid如何跳转到非当前页的指定行?
分页模式下网格基于主键跳转到指定行的实现问题
我现在有一段无分页时基于主键跳转到指定行的代码:
public scrollToRow(index: number){ let row = this.grid.getRowByKey(index); if(index != null || this.grid != null ){ if(row == null){ console.log("Cannot navigate to row that is not in the visible grid viewport.") }else{ row.selected = true; let scroll = this.grid.defaultRowHeight * 15; this.grid.verticalScroll.scrollPosition = scroll; } }else{ console.log("Cannot navigate to row that does not exist. Record: " + index + " not found."); } }
这段代码只在网格没有分页的时候能用,现在我需要实现分页模式下的跳转功能。如果找不到组件自带的简便方法,我打算这么做:先确定网格的排序规则,计算出目标记录所在的页码,切换到对应页面后再执行上面的代码。但现在不知道怎么获取每页条数和具体的排序信息来完成计算,希望能得到帮助。
解决思路
1. 优先用组件自带的分页跳转API
绝大多数UI网格组件(比如AG Grid、DevExtreme这类)都内置了分页场景下的行定位功能,举几个常见例子:
- AG Grid:可以用
api.setRowData()加载目标页数据后,调用api.ensureIndexVisible()或者api.getRowNode(id)完成定位 - DevExtreme Grid:通过
instance.pageIndex(newPageIndex)切换页码,再用instance.selectRows([key])选中行并滚动到视图内
先查你所用网格组件的官方文档,看看有没有直接支持的方法,这是最省事的实现方式。
2. 手动计算页码的步骤
如果组件没有现成方法,就按以下步骤手动实现:
- 获取每页条数:一般组件会提供分页配置的访问属性,比如AG Grid用
api.paginationGetPageSize(),DevExtreme用instance.pageSize();要是组件没直接暴露,也可以从你初始化网格时设置的pageSize变量里读取。 - 获取排序信息:网格组件通常会暴露当前的排序状态,包含排序字段和方向。比如AG Grid用
api.getSortModel()返回排序数组,里面有colId和sort(升序/降序);DevExtreme用instance.sorting()获取完整排序配置。 - 计算目标页码:这一步可能需要后端配合,根据当前排序规则和主键,查询该记录在全量数据中的全局索引位置,再用公式计算:
页码 = Math.floor(全局索引 / 每页条数) + 1。如果前端缓存了全量数据,也可以在前端对缓存数据按当前排序规则排序后,找到目标记录的索引再计算页码。 - 切换页码并执行跳转:调用网格的分页切换方法跳转到目标页码,等页面数据加载完成后,执行你现有的
scrollToRow方法选中并滚动到目标行。
内容的提问来源于stack exchange,提问作者Ted Herrlich
相关产品推荐
相关产品推荐

