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

AG-Grid如何排除选中行不受setQuickFilter过滤影响?

AG-Grid 实现选中行不受搜索过滤影响的方案

AG-Grid 完全支持这类需求,你需要结合外部过滤器和手动触发过滤刷新来实现,之前的问题出在没有在选中行或搜索条件变化时主动触发过滤更新。以下是具体实现步骤:

核心思路

让所有选中行直接通过过滤,未选中行则匹配用户的搜索条件;同时在搜索关键词变化、选中行变化时,主动通知网格重新执行过滤逻辑。

具体实现代码示例

// 维护全局状态:搜索关键词、选中行ID列表
let searchKeyword = '';
let selectedRowIds = [];

// 网格配置
const gridOptions = {
  rowSelection: 'multiple', // 启用多行选中
  // 告诉网格存在外部过滤逻辑
  isExternalFilterPresent: () => true,
  // 自定义过滤规则
  doesExternalFilterPass: (rowNode) => {
    // 规则1:选中的行直接通过过滤
    if (selectedRowIds.includes(rowNode.data.id)) {
      return true;
    }
    // 规则2:未选中行匹配搜索关键词(复用AG-Grid快速过滤器逻辑)
    const quickFilter = gridApi.getQuickFilterInstance();
    return quickFilter.doesRowPassQuickFilter(rowNode, searchKeyword);
  },
  // 选中行变化时更新状态并触发过滤刷新
  onSelectionChanged: () => {
    selectedRowIds = gridApi.getSelectedNodes().map(node => node.data.id);
    gridApi.onFilterChanged();
  }
};

// 搜索输入框的处理函数
function onSearchInputChange(e) {
  searchKeyword = e.target.value.trim();
  // 手动触发过滤刷新
  gridApi.onFilterChanged();
}

关键说明

  1. 不要调用setQuickFilter:我们自己维护搜索关键词,通过getQuickFilterInstance().doesRowPassQuickFilter复用AG-Grid内置的快速过滤逻辑,避免全局覆盖过滤规则。
  2. 手动触发过滤刷新:isExternalFilterPresent和doesExternalFilterPass不会自动监听选中行或搜索条件的变化,必须调用gridApi.onFilterChanged()来强制网格重新计算过滤结果。
  3. 选中行状态维护:通过onSelectionChanged事件实时更新选中行的ID列表,确保过滤规则能获取最新的选中状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:27:09