找回密码
 立即注册

QQ登录

只需一步,快速开始

sfeig

注册会员

14

主题

38

帖子

110

积分

注册会员

积分
110
sfeig
注册会员   /  发表于:2021-2-2 11:47  /   查看:2534  /  回复:9
绑定模板如下:
image.png838061523.png

要实现的结果如下:
image.png291488951.png

或者有没有其他的可以绑定列表的实现方式,谢谢!

9 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-2 12:11:45
沙发
本帖最后由 lynn512 于 2021-2-2 12:17 编辑

根据您提供的图片,使用的是单元格级别的绑定。这种绑定方式下,字段与值是一一对应的,无法实现您图中期待的效果。
如果您想实现一组数据的绑定,建议您参考 表格绑定 或 表单绑定。
推荐观看教学视频,更快学习数据绑定相关内容:
https://gcdn.grapecity.com.cn/showtopic-56767-1-1.html

您也可以在学习指南了解更多内容:
https://demo.grapecity.com.cn/sp ... evel-binding/purejs
https://demo.grapecity.com.cn/sp ... able-binding/purejs

回复 使用道具 举报
sfeig
注册会员   /  发表于:2021-2-2 22:19:20
板凳
仔细看了上面的资料,但感觉还是很难实现,但是有一个想法,不知道是否可行?
仍采用路径绑定的方式,单条数据绑定生成结果后,拷贝这些内容包括样式,然后粘贴到另一个sheet中,粘贴时仅包含样式和数据,接着利用下一条数据生成新的结果,然后再接着粘贴到新的sheet中,这样就可以在一个sheet中生成连续的数据了,但查看了API资料,好像没有找到复制、粘贴的api,不知道是否没找对地方
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-3 09:24:30
地板
本帖最后由 lynn512 于 2021-2-3 09:27 编辑

您自己先按照自己的思路实现下,关于跨sheet复制粘贴的问题,请参考以下帖子:
https://gcdn.grapecity.com.cn/showtopic-56821-1-210.html

您也可以借助论坛的搜索功能,查找与本问题相似的帖子,更快的获取答案。

API:
https://demo.grapecity.com.cn/sp ... rksheet.html#copyTo
https://demo.grapecity.com.cn/sp ... html#.CopyToOptions
回复 使用道具 举报
sfeig
注册会员   /  发表于:2021-2-3 11:18:29
5#
按照上面的思路已经实现了,但是有一些问题,在每次完成一个对象数据绑定复制粘贴之后,需要主动停顿一些时间,否则后面的值拷贝不上去,目前停顿100毫秒是可以的,如果是10毫秒就会导致前面的拷贝不成功后,将来如果模板要绑定的数据更多,这个时间就不太好设定了,请问有没有什么事件或者其他的机制使得可以避免停顿这个操作?具体请参见附件代码,谢谢。

spreadjs.zip

626.29 KB, 下载次数: 63

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-3 12:12:49
6#
本帖最后由 lynn512 于 2021-2-3 14:13 编辑

收到,这边查看下,预计下午更新进展。
------------------------------------------------

请问有没有什么事件或者其他的机制使得可以避免停顿这个操作?
绑定数据源是一个过程,根据您代码,数据源还未绑定完毕已经开始执行下一步的操作,所以需要手动加上停顿时间来避免这个行为。
从这个思路看,停顿时间需要您根据业务量自行判断,无法预计。

这边有个思路是,可以利用SpreadJS提供的事件(如valueChanged事件)来监听绑定数据源这一行为的完成。
当绑定数据源完成后,再执行复制粘贴操作。

这边只是提供一个思路,具体代码还需要您根据需求自行实现。

您可以在API文档中查看到所有事件。
https://demo.grapecity.com.cn/sp ... #event:ValueChanged
image.png574488524.png

回复 使用道具 举报
sfeig
注册会员   /  发表于:2021-2-4 08:41:58
7#
刚才验证了一下,其实并不是setDataSource造成的,而是spread.commandManager().execute造成的,但是这个方法并不是异步方法,添加await貌似无效
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-4 11:05:41
8#
这边进一步调研了下,根据您的情况更推荐您使用 区域模板 ,如下图所示:
image.png468322143.png

您可以先设计好模板样式,然后绑定数据源即可。
不过这种方式有一个问题:数据只能展示而不能直接编辑修改,只能动态改变数据源实现数据的更新。您看是否满足您的需求。
具体您可以在学习指南了解:
https://demo.grapecity.com.cn/sp ... lls/range-template#

再说回前面的问题,SJS内部粘贴机制较复杂,执行”paste“命令时存在异步情况,且目前是无法直接控制的。
所以不建议您使用demo代码所示的方式。
前面有提到 copyTo 方法,建议您使用 copyTo 将数据复制在同个 sheet (即sheet1),待全部数据复制完毕后,再对这些数据统一的 复制粘贴 至 sheet2,
也就是说,只执行了一次 paste 命令,就不会出现上述问题了。

回复 使用道具 举报
sfeig
注册会员   /  发表于:2021-2-5 08:46:43
9#
收到,由于最终生成的报表中包含动态行结果,所以采用了第二种方式,谢谢。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-5 09:09:49
10#
您客气了,那这边就先结帖了,有问题欢迎另开新帖。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部