找回密码
 立即注册

QQ登录

只需一步,快速开始

gnip

高级会员

139

主题

367

帖子

1170

积分

高级会员

积分
1170
gnip
高级会员   /  发表于:2024-6-26 15:19  /   查看:2081  /  回复:14
100金币
用自定义ui方式替换原有的属性面板,然后通过api设置模版属性和获取模版属性,但是有一个问题,getTemplateCell方法获取到的属性不全

image.png616332702.png 比如这个单元格,只返回了这两属性,还是我通过setTemplateCell设置的,不设置压根没有,这就存在一个问题,每次要是要更新模版单元格,岂不是要把所有属性都全部设置一遍嘛?不然我回显的时候,通过getemplateCell方法拿到的属性配置根本不全,想问一下这个怎么处理好点,全部设置会有性能问题,比如用户选择一个区域,全量去设置会卡顿页面一段时间。

最佳答案

查看完整内容

找到一个可行的方法,即控制绘制次数。当表单发生变化时SpreadJS自动刷新,在这样的机制下,当您批量设置报表单元格时,每设置一个都将刷新一次,可在设置前后合理利用挂起绘制与恢复绘制,能够节省一定时间,示例如下: 关于挂起绘制与恢复绘制对性能的优化可详细参考官方demo:https://demo.grapecity.com.cn/spreadjs/help/docs/BestPractices/UsingsuspendPaintandresumePaint

14 个回复

倒序浏览
最佳答案
最佳答案
eat_grape_5
高级会员   /  发表于:2024-6-26 15:19:46
来自 12#
本帖最后由 eat_grape_5 于 2024-6-27 10:07 编辑
gnip 发表于 2024-6-26 18:54
而且这样如果每次更新带上所有属性,用户如果框选一个区域,批量设置,页面会卡住,根据选中单元格的数量决 ...

找到一个可行的方法,即控制绘制次数。当表单发生变化时SpreadJS自动刷新,在这样的机制下,当您批量设置报表单元格时,每设置一个都将刷新一次,可在设置前后合理利用挂起绘制与恢复绘制,能够节省一定时间,示例如下:
  1. //  报表模板,spread为当前工作簿
  2. var templateSheet = spread.getSheetTab(0).getTemplateSheet();
  3. function setCellAdvanced(rowStart, colStart, rowCount, colCount) {
  4.     spread.suspendPaint();
  5.     spread.suspendEvent();
  6.     for (var i = rowStart; i < rowCount; i++) {
  7.         for (var j = colStart; j < colCount; j++) {
  8.             templateSheet.setTemplateCell(i, j, {
  9.                 type: 'List',
  10.                 binding: `Orders[orderId]`,
  11.                 autoExpand: 'Vertical',
  12.                 spillMode: 'Overwrite',
  13.                 spillDirection: 'Vertical',
  14.             });
  15.         }
  16.     }
  17.     spread.resumeEvent();
  18.     spread.resumePaint();
  19. }
复制代码


关于挂起绘制与恢复绘制对性能的优化可详细参考官方demo:https://demo.grapecity.com.cn/spreadjs/help/docs/BestPractices/UsingsuspendPaintandresumePaint
回复 使用道具 举报
eat_grape_5
高级会员   /  发表于:2024-6-26 17:54:39
2#
楼主展示的属性是autoExpand,这个属性的默认值是Both,即横向和纵向双向扩展。在默认的设置面板中,这个属性的默认值会正常渲染显示,如下图:
1719395543238.png10030211.png
由于楼主自定义了设置面板,因此在显示属性时需要跟原有设置面板的属性显示一致,解决了这个问题就都ok了。
关于autoExpand属性,请参考官方demo链接:https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/report-sheet/layout-settings/auto-expand/purejs。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-6-26 18:04:27
3#
您好,参考楼上热心小伙的回复即可。有问题随时交流。
回复 使用道具 举报
gnip
高级会员   /  发表于:2024-6-26 18:21:17
4#
eat_grape_5 发表于 2024-6-26 17:54
楼主展示的属性是autoExpand,这个属性的默认值是Both,即横向和纵向双向扩展。在默认的设置面板中,这个属 ...

大哥,你没看懂我的需求,不是你理解的这样
回复 使用道具 举报
gnip
高级会员   /  发表于:2024-6-26 18:24:27
5#
gnip 发表于 2024-6-26 18:21
大哥,你没看懂我的需求,不是你理解的这样

楼上大哥都理解错我的意思,我的意思是通过getTemplateCell获取的属性不全,api调用的方式我需要所有的属性配置项,不然回显有问题
回复 使用道具 举报
eat_grape_5
高级会员   /  发表于:2024-6-26 18:24:49
6#
gnip 发表于 2024-6-26 18:21
大哥,你没看懂我的需求,不是你理解的这样

那请楼主指正下理解不到位的地方,谢谢!
回复 使用道具 举报
eat_grape_5
高级会员   /  发表于:2024-6-26 18:26:58
7#
gnip 发表于 2024-6-26 18:24
楼上大哥都理解错我的意思,我的意思是通过getTemplateCell获取的属性不全,api调用的方式我需要所有的属 ...

getTemplateCell接口的返回值中不包含那些未设置的属性,因为这些属性未被设置过,没有值与其匹配。
回复 使用道具 举报
gnip
高级会员   /  发表于:2024-6-26 18:31:24
8#
image.png640049438.png
回复 使用道具 举报
eat_grape_5
高级会员   /  发表于:2024-6-26 18:41:26
9#

前后两次设置,虽然作用于同一个单元格,但setTemplateCell的第三个参数有变化。从面向对象的编程角度而言,这两个参数本质上是两个完全不同的对象,当然是后一个对象把前一个对象覆盖了。一般而言,设置之前要获取原来的属性对象,在这个属性对象中追加新的属性,再用变化后的属性对象调用setTemplateCell方法将属性设置回单元格。以楼主提供的图片中的代码为例,第二次设置的代码应该是:
  1. templateSheet.setTemplateCell(i, j, {
  2.     type: 'List',
  3.     binding: 'Bid[age]',
  4.     spillMode: 'Overwrite'
  5. });
复制代码
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部