初始加载后 ag-grid 刷新列过滤器

Posted

技术标签:

【中文标题】初始加载后 ag-grid 刷新列过滤器【英文标题】:ag-grid Refresh Column Filter after initial load 【发布时间】:2019-08-16 01:53:45 【问题描述】:

根据https://www.ag-grid.com/javascript-grid-filter-set/,“网格不会为您更新过滤器,因为用例太多...”,#agreed

我正在使用具有无限分页功能的服务器端数据源来查询大量数据。虽然在初始加载时,我可能确信过滤器列出了所有可用的“选择”,但我希望找到一种解决方案,以确定某个频率/事件“重新加载”过滤器。

我正在尝试使用调用 gridOptions.api.getFilterInstance(id) 返回的对象的 resetFilterValues() 方法。

使用服务器端数据源时,我收到以下 console.error 输出:

ag-Grid: Set Filter cannot initialise because you are using a row model that does not contain all rows in the browser. Either use a different filter type, or configure Set Filter such that you provide it with values (Source ag-grid-enterprise.min.js:555

注意:带有异步值加载的 values 方法效果很好,并且是按照推荐编写的,例如使用值回调 params.success。

我使用以下方法在列标题中加载过滤器选项:


    headerName: 'Something',
    field: 'SOMETHING',
    width: 200,
    suppressMenu: false,
    suppressFilter: false,
    filter: 'agSetColumnFilter',
    filterParams: 
        values: function (params) 
            someAsyncMethodReturningAPIResultsAsArray();
        
        newRowsAction: 'keep'
    ,
    menuTabs: ['filterMenuTab']

然后,我稍后会尝试使用以下代码重新加载过滤器(例如在网格外按下按钮时):

var filter = gridOptions.api.getFilterInstance(id);
filter.resetFilterValues();

此代码导致上述错误。

问:有谁知道如何配置 Set Model 以返回错误消息中描述的行?有没有更好的方法来解决任何人都遇到过的这个问题?

谢谢

【问题讨论】:

您找到刷新(重新加载)过滤器的方法了吗?我试图找出同样的事情 对不起,没有。看起来这个项目也打了他们的后腿。我最终推出了自己的自定义过滤器并端到端拥有整个流程。不幸的是,根本没有使用他们的内置过滤器。如果有帮助,很乐意分享通用代码,请私信我 @Pepto 我正在努力解决同样的问题。您能否就这个问题分享您的自定义过滤器?这将有很大帮助。提前谢谢! 【参考方案1】:

下面这段代码可以在postProcessPopup回调中执行,每次打开弹窗时都会调用filterParams中定义的values()函数

var filter = gridOptions.api.getFilterInstance(id);
filter.refreshFilterValues();

注意refreshFilterValues 函数在这里起到了作用。它在 v24 及更高版本中可用。不太确定旧版本。

【讨论】:

以上是关于初始加载后 ag-grid 刷新列过滤器的主要内容,如果未能解决你的问题,请参考以下文章

AG-Grid - 显示排序图标而不重新加载数据

为啥 ag-grid 过滤器比较器没有执行?

Ag-grid 隐藏过滤列

以角度将列标题过滤器保存在 ag-grid 中

ag-grid 日期列 inRange 过滤器 - 如何访问测试函数中的“到”日期?

需要在 AG-Grid 过滤器中使用空格分隔值来返回每个匹配项