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