You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AG Grid SSRM模式下如何预加载所有行实现全选?

AG Grid SSRM 全选问题解决方案

针对你用Server-Side Row Model(SSRM)实现动态表格时,全选按钮无法选中未加载行的问题,核心原因是SSRM按需加载行节点,forEachNode只能遍历已加载到客户端的节点。以下是几种无需复杂状态管理的解决方案:

方案1:预加载所有行(适合小数据量场景)

如果表格数据总量不大,可以在点击全选按钮时强制加载所有行,再执行选中操作:

toggleSelect(): void {
  this.isChecked = !this.isChecked;
  if (this.isChecked) {
    const totalRows = this.params.api.getVirtualRowCount();
    // 循环触发每一行的加载与选中
    for (let i = 0; i < totalRows; i++) {
      this.params.api.ensureIndexVisible(i);
      const node = this.params.api.getRowNode(i);
      node?.selectThisNode(true);
    }
    // 触发选择变更事件
    this.params.api.eventService?.dispatchEvent({
      type: 'selectionChanged',
      api: this.params.api,
      columnApi: this.params.columnApi
    });
  } else {
    this.deselectAll();
  }
}

注意:数据量过大(如上万行)时,此方法会导致客户端性能问题,不推荐使用。

方案2:启用服务器端选择模式(推荐大数据量场景)

通过AG Grid内置的服务器端选择配置,仅维护一个全局全选状态,无需手动管理所有行的选中状态:

  1. 表格配置新增参数:
gridOptions = {
  rowSelection: 'multiple',
  serverSideSelection: true,
  // 自定义行选中判断逻辑
  isRowSelected: (node: RowNode) => {
    return this.isAllSelected || node.isSelected();
  },
  // 其他SSRM相关配置...
};
  1. 按钮组件简化全选逻辑:
toggleSelect(): void {
  this.isChecked = !this.isChecked;
  // 通知表格刷新选中状态,新加载的行会自动应用全选规则
  this.params.api.refreshClientSideRowModel('selection');
  
  if (!this.isChecked) {
    this.deselectAll();
  }
}

此方法无需加载所有行,仅通过一个布尔值控制全选状态,性能开销极低,新滚动加载的行渲染时会自动被选中。

方案3:使用AG Grid内置selectAll()方法

配合serverSideSelection: true配置,直接调用内置方法实现全选:

toggleSelect(): void {
  this.isChecked = !this.isChecked;
  if (this.isChecked) {
    this.params.api.selectAll();
  } else {
    this.params.api.deselectAll();
  }
}

开启serverSideSelection: true后,selectAll()会标记全局全选状态,而非仅选中已加载行,后续滚动加载的行自动进入选中状态。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:45:20