本帖最后由 Richard.Huang 于 2024-4-16 12:16 编辑
背景
填报场景往往是很多报表系统需要遇到的,目前SpreadJSV17新增的ReportSheet可以完美实现模板的设计,用户填写的信息的获取,已有数据的交叉展示。 但是上面这种操作方式会存在一个弊端,即每个table绑定,我们要为数据源添加一个table的绑定信息,这个是无法避免的。万一用户在填报时还要添加一个表格绑定,这就要了老命,业务人员没办法给这个数据源添加一个table的绑定路径。那么有没有一个事件可以监听到用户添加了绑定信息呢? 答案是,没有,我们没有事件可以监听用户设置了绑定信息,但是,这不代表我们不能去实现这样一个需求,因为Designer中右侧字段列表实际也就是一个dom,左侧工作簿也是在一个dom里实现的,我们完全可以借助JS原生的一些事件通过监听该dom上的拖动动作,动态的为当前工作表创建数据源
实现方式
- var spreadHost = spread.getHost();// 获取工作表元素
- // 监听SpreadJS所在dom元素的drop事件,用于确定拖放位置
- spreadHost.addEventListener('drop', function (event) {
- var sheet = spread.getActiveSheet();
- var cellInfo = spread.hitTest(event.offsetX, event.offsetY);// 获取松开位置单元格信息
- var cellRow = cellInfo.worksheetHitInfo.row;
- var cellCol = cellInfo.worksheetHitInfo.col;
- var temp = {}
- if (sheet.getDataSource()) {// 判断当前是不是有数据源,如果没有,得新建一个,如果有,就拿去对应数据源
- temp = sheet.getDataSource().getSource()
- }
- setTimeout(function () {
- // 要让拖动处理结束后再执行这段逻辑,因为拖动结束后才会创建表格,以及给表格设置绑定路径
- var table = sheet.tables.find(cellRow, cellCol);
- if (table && table.bindingPath()) {
- temp[table.bindingPath()] = [{}];
- }
- var source = new GC.Spread.Sheets.Bindings.CellBindingSource(temp);
- sheet.setDataSource(source);
- }, 0)
- })
复制代码 完整代码
Designer右侧字段树拖放监听.html
(4.49 KB, 下载次数: 238)
|