Lynn.Dou 发表于 2024-12-17 15:04:42

复杂表格数据绑定方案 - 绑定数据源

接上文:复杂表格数据绑定方案 - 绑定字段

3、绑定数据源

加载模板后,根据业务需求(如从后端获取数据源)将获取的数据源进行绑定,这里数据源结构如下:


使用setDataSource方法进行绑定:
var source = new GC.Spread.Sheets.Bindings.CellBindingSource(data);
                sheet.setDataSource(source);此时控制台报错如下:
https://gcdn-cdn.grapecity.com.cn/data/attachment/forum/202412/06/162510naixbiba3be8ni74.png
原因是在加载数据源时,数据源的条数较多,超出了sheet的行数,所以出现了此错误提示。
SpreadJS提供了expandBoundRows方法,即方法作用为设置或获取表格绑定时是否扩展行信息。如设置为true即表示table数据源增加时sheet也会对应的增加行。
所以,将代码修改如下:
var tables = sheet.tables.all();
            for(var i=0; i<tables.length; i++) {
                var table = sheet.tables.all();
                table.expandBoundRows(true);
            }此时继续执行,数据源可以加载成功,但样式并非我们所期望的:
如下图,
https://gcdn-cdn.grapecity.com.cn/data/attachment/forum/202412/06/162552kxgha735zhmwy81y.png
所以需要借助copyTo方法,对模板中设置的第一行样式进行复制,代码如下:
var table = sheet.tables.findByName("sales");
                var range = table.range();
                var row = range.row;
                for (var i = 0; i < range.rowCount - 1; i++) {
                  sheet.copyTo(row, -1, row + i + 1, -1, 1, -1, GC.Spread.Sheets.CopyToOptions.span | GC.Spread.Sheets.CopyToOptions.style | GC.Spread.Sheets.CopyToOptions.formula)
                }
来看下最终效果,与初始预期的效果一致:



注:
绑定数据源后,用户也可以进行table数据的新增、修改、删除等操作,SpreadJS提供了getDataSource方法用于获取数据源。



附件提供了相关demo,包含模板、数据源、实现代码等,感兴趣的小伙伴可以自行操作测试看看。

附加资料:
1、数据绑定-字段列表的获取与设置


页: [1]
查看完整版本: 复杂表格数据绑定方案 - 绑定数据源