Filter保存筛选状态,再次加载表单数据时恢复筛选条件
本帖最后由 Lynn.Dou 于 2022-6-16 09:40 编辑背景:
有一些小伙伴遇到这样的需求:
在表格加载的数据中,用户做了一些筛选的操作,并希望再次加载时还能保留这些加载项。
而我们一般不会把用户的每次操作的完整文档都执行保存,那么能否仅保留筛选状态呢?
答案是肯定的,我们可以通过以下代码来获取到当前sheet表单的filter:
var filter = sheet.rowFilter()
然后我们可以发现,这个filter实际上是有一个toJSON方法的,如API所示:
https://demo.grapecity.com.cn/spreadjs/help/latest/content/SpreadJS~GC.Spread.Sheets.Filter.RowFilterBase~toJSON.html
通过调用这个toJSON方法,可以序列化出来一个json对象,对象结构如下:
可以看到,包括筛选区域、筛选按钮是否可见、筛选列标、被筛选掉的行等信息都有,我没有完全展开它,
实际上这个对象就包含了所有与筛选器相关的属性,而且与sheet无关联。
我们只要把它保存起来,当再次加载数据,需要再次把它投射到指定区域然后执行筛选时,只需要调用:
sheet.rowFilter().fromJSON(json);
需要注意的是,fromJSON后filter只是拿到了筛选状态,
还没有执行出最终结果集,所以需要再调用一下filter的filter()方法,如下:
sheet.rowFilter().filter();
之后刷新sheet,即可重新载入筛选设置。
sheet.repaint()
我做了一个简单的demo还原rowFilter的toJSON和fromJSON的功能,但是发现fromJSON并不能还原筛选框之前存储的状态,能麻烦看看什么问题吗?
您好,在您的Demo中对table的筛选重置一下既可:
document.getElementById('FilterfromJSON').addEventListener('click',function () {
sheet.suspendPaint()
table.rowFilter().reset()
var filterjson=document.getElementById("stateText").value;
console.info(JSON.parse(filterjson));
table.rowFilter().fromJSON(JSON.parse(filterjson));
sheet.resumePaint()
}); Fiooona 发表于 2020-5-18 17:35
您好,在您的Demo中对table的筛选重置一下既可:
您好,我也遇到了同样的问题。就沿用楼上童鞋的那个Demo,按照您说的这么调整后还是不行。漏斗有了,但没出效果。
chou19870206 发表于 2020-8-4 10:09
您好,我也遇到了同样的问题。就沿用楼上童鞋的那个Demo,按照您说的这么调整后还是不行。漏斗有了,但没 ...
你好,感谢反馈,文章中没有指出的一点是,fromJSON后filter只是拿到了筛选状态,
还没有执行出最终结果集,所以需要调用一下filter的filter()方法,如图:
页:
[1]