找回密码
 立即注册

QQ登录

只需一步,快速开始

Wilson.Zhang

超级版主

30

主题

1579

帖子

2157

积分

超级版主

Rank: 8Rank: 8

积分
2157
Wilson.Zhang
超级版主   /  发表于:2024-9-30 14:25  /   查看:14  /  回复:0
如果同列中的连续单元格设置了数据绑定路径,在非填报模式下,拖拽填充这几个单元格,其值相同,同时也将其绑定路径同化,如图1所示。

拖拽填充更改绑定路径.gif

图1. 拖拽填充更改绑定路径

SpreadJS关于拖拽填充的设计包含了这样的理念,必然有合适的需求。我们暂时无从得知需求,不过既然拖拽填充本就可以将连续单元格中的数据同一化,令数据绑定路径也同一化似乎也有理可循。可是呢,有的用户不这么认为,或者对此期望不同。比如说,设置了数据绑定是为了便于根据既定的数据结构将数据填充至Worksheet,体现SpreadJS的特性之一,即在线填报。填报数据后,拖拽填充同行或同列的连续单元格却可以是出自修改数据的目的。SpreadJS并未限制填报数据后不可修改,那么,只希望修改数据而不变动数据绑定路径也显然合理。可是,问题在于,功能原生设计便限制了拖动填充也会同一化单元格的绑定路径,怎么办呢?

先不分析SpreadJS的功能支持,先就现象展开想象。如果在拖拽填充的过程中能够记录单元格的绑定路径信息,且在拖拽填充动作结束后将其重新设置在单元格上,正好还原,实现闭环。上述方案可行吗?暂不得知,可以确定的是依然要依赖SpreadJS的既有功能实现。那么,就调研下SpreadJS的相关功能。

SpreadJS提供了两个与拖拽填充相关的事件,即DragFillBlock和DragFillBlockCompleted事件。根据名称中的时态,不难得知DragFillBlock发生在拖拽填充进行时,而DragFillBlockCompleted是拖拽填充完成时,而且是现在完成时。那么,拟定方案如下:

1. 为Worksheet注册DragFillBlock事件,事件发生时,判断事发区域内每个单元格是否有绑定路径,如有则记录单元格信息和绑定路径信息,将其对应关联,否则放行。
2. 为Worksheet注册DragFillBlockCompleted事件,监听事件完成时,将刚才的案发单元格区域内搜集到的路径绑定信息一一复原,实现闭环。

遵照上述思路,运行结果如图2所示。好一招偷天换日,无所遁形,用户看到的始终是原有的绑定路径,不曾觉察其中有变。

拖拽填充不更改绑定路径.gif

图2. 拖拽填充不更改绑定路径

附上demo,以供参考。关于DragFillBlock和DragFillBlockCompleted事件,请参考官网API文档了解详情。
DragFillBlock:https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Events#dragfillblock
DragFillBlockCompleted:https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Events#dragfillblockcompleted

拖拽填充不更改绑定路径.html

5.64 KB, 下载次数: 0

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部