AG Grid,使用树格式化数据并通过非叶节点进行过滤

我正在向网格提供树形格式的数据。 当我使用列过滤器时,它将过滤器应用到叶节点并显示需要提供叶子路径的父节点。

我正在寻找一种方法来允许用户提供一个快速过滤器和列过滤器。 快速筛选器将筛选出不包含筛选文本的所有非叶节点。 最终结果是用户可以用快速过滤器过滤非叶节点,然后用列过滤器过滤到叶节点。

任何想法如何做到这一点? 我意识到我可以过滤树数据并将其预过滤到网格,但我真的需要找到一种方法来实现这一点,同时仍然将整个未过滤的树数据传递到网格。

这可能吗? 如果没有,我可以以某种方式手动隐藏非叶节点而不从树数据模型中移除它?


也许你已经看到了github上的这个增强请求...

https://github.com/ceolter/ag-grid/issues/110

我拿了在那里创建的例子,并用externalFilter修改它。 这里是一个JSFiddle的例子。

以下是外部过滤器的过程:

  • 当输入改变时,通过调用gridOptions.api.onFilterChanged()格。

  • 通过将gridOptions.isExternalFilterPresent设置为true ,让网格知道外部过滤器存在

  • 然后将在每个node上调用gridOptions.doesExternalFilterPass - 重要的是要注意,它在每个节点上被调用...一个组不被视为节点,只有叶元素

  • 每个节点都通过node.parent包含其父节点的数据,因此如果父节点的组名包含过滤器文本,请检查父节点的组名,如下所示: node.parent.data.group.includes($scope.filter)如果为true那么该节点将保持在网格中。

  • 这个例子只显示了一个级别......如果你在组内有组,那么通过递归检查父母的父母的名字,那么在doesExternalFilterPass的逻辑将变得更加复杂,但是该逻辑不应该太可怕...

    此外,如果您有任何没有孩子的群组,他们将自动被过滤掉,因为他们没有真正的节点显示/过滤。

    链接地址: http://www.djcxy.com/p/31053.html

    上一篇: AG Grid, using tree formatted data and filtering by non leaf nodes

    下一篇: WinForms XtraGrid column filter checked listbox actual data