如果同列中的连续单元格设置了数据绑定路径,在非填报模式下,拖拽填充这几个单元格,其值相同,同时也将其绑定路径同化,如图1所示。
图1. 拖拽填充更改绑定路径
SpreadJS关于拖拽填充的设计包含了这样的理念,必然有合适的需求。我们暂时无从得知需求,不过既然拖拽填充本就可以将连续单元格中的数据同一化,令数据绑定路径也同一化似乎也有理可循。可是呢,有的用户不这么认为,或者对此期望不同。比如说,设置了数据绑定是为了便于根据既定的数据结构将数据填充至Worksheet,体现SpreadJS的特性之一,即在线填报。填报数据后,拖拽填充同行或同列的连续单元格却可以是出自修改数据的目的。SpreadJS并未限制填报数据后不可修改,那么,只希望修改数据而不变动数据绑定路径也显然合理。可是,问题在于,功能原生设计便限制了拖动填充也会同一化单元格的绑定路径,怎么办呢?
先不分析SpreadJS的功能支持,先就现象展开想象。如果在拖拽填充的过程中能够记录单元格的绑定路径信息,且在拖拽填充动作结束后将其重新设置在单元格上,正好还原,实现闭环。上述方案可行吗?暂不得知,可以确定的是依然要依赖SpreadJS的既有功能实现。那么,就调研下SpreadJS的相关功能。
SpreadJS提供了两个与拖拽填充相关的事件,即DragFillBlock和DragFillBlockCompleted事件。根据名称中的时态,不难得知DragFillBlock发生在拖拽填充进行时,而DragFillBlockCompleted是拖拽填充完成时,而且是现在完成时。那么,拟定方案如下:
1. 为Worksheet注册DragFillBlock事件,事件发生时,判断事发区域内每个单元格是否有绑定路径,如有则记录单元格信息和绑定路径信息,将其对应关联,否则放行。
2. 为Worksheet注册DragFillBlockCompleted事件,监听事件完成时,将刚才的案发单元格区域内搜集到的路径绑定信息一一复原,实现闭环。
遵照上述思路,运行结果如图2所示。好一招偷天换日,无所遁形,用户看到的始终是原有的绑定路径,不曾觉察其中有变。
图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
|
|