找回密码
 立即注册

QQ登录

只需一步,快速开始

KevinChen 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-3-26 18:08  /   查看:7149  /  回复:5
本帖最后由 Lynn.Dou 于 2022-6-16 09:40 编辑

背景:

有一些小伙伴遇到这样的需求:
在表格加载的数据中,用户做了一些筛选的操作,并希望再次加载时还能保留这些加载项。
而我们一般不会把用户的每次操作的完整文档都执行保存,那么能否仅保留筛选状态呢?

答案是肯定的,我们可以通过以下代码来获取到当前sheet表单的filter:
  1. 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对象,对象结构如下:

image.png841687011.png

可以看到,包括筛选区域、筛选按钮是否可见、筛选列标、被筛选掉的行等信息都有,我没有完全展开它,
实际上这个对象就包含了所有与筛选器相关的属性,而且与sheet无关联。

我们只要把它保存起来,当再次加载数据,需要再次把它投射到指定区域然后执行筛选时,只需要调用:
  1. sheet.rowFilter().fromJSON(json);
复制代码

需要注意的是,fromJSON后filter只是拿到了筛选状态,

还没有执行出最终结果集,所以需要再调用一下filter的filter()方法,如下:
  1. sheet.rowFilter().filter();
复制代码

之后刷新sheet,即可重新载入筛选设置。
  1. sheet.repaint()
复制代码


5 个回复

倒序浏览
longyan1979
注册会员   /  发表于:2020-5-15 16:46:24
沙发
我做了一个简单的demo还原rowFilter的toJSON和fromJSON的功能,但是发现fromJSON并不能还原筛选框之前存储的状态,能麻烦看看什么问题吗?

rowFilter问题.zip

1.05 MB, 下载次数: 594

回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-5-18 17:35:38
板凳
您好,在您的Demo中对table的筛选重置一下既可:
  1.                 document.getElementById('FilterfromJSON').addEventListener('click',function () {
  2.         sheet.suspendPaint()
  3.         table.rowFilter().reset()
  4.                                 var filterjson=document.getElementById("stateText").value;
  5.                                 console.info(JSON.parse(filterjson));
  6.         table.rowFilter().fromJSON(JSON.parse(filterjson));
  7.         sheet.resumePaint()
  8.             });
复制代码
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
chou19870206
初级会员   /  发表于:2020-8-4 10:09:52
地板
Fiooona 发表于 2020-5-18 17:35
您好,在您的Demo中对table的筛选重置一下既可:

您好,我也遇到了同样的问题。就沿用楼上童鞋的那个Demo,按照您说的这么调整后还是不行。漏斗有了,但没出效果。
回复 使用道具 举报
chou19870206
初级会员   /  发表于:2020-8-4 10:10:24
5#
chou19870206 发表于 2020-8-4 10:09
您好,我也遇到了同样的问题。就沿用楼上童鞋的那个Demo,按照您说的这么调整后还是不行。漏斗有了,但没 ...

image.png156953124.png
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-8-4 14:02:44
6#
你好,感谢反馈,文章中没有指出的一点是,fromJSON后filter只是拿到了筛选状态,

还没有执行出最终结果集,所以需要调用一下filter的filter()方法,如图:

image.png19396056.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部