【实用】如何在SpreadJS中进行空白报表填报
本帖最后由 Clark.Pan 于 2022-2-7 10:21 编辑SpreadJS的其中一个常用场景就是数据填报,利用SpreadJS本身的数据绑定功能,我们可以快速获取填报的数据内容,非常的方便和实用。在数据填报的场景中,我们经常会遇到设计一个填报为空的空模板,然后在其之上进行数据填报处理。这个时候在利用数据绑定做处理的时候,往往会出现无从下手的情况:如果不设置setDataSource,那么无法按照数据源的格式获取到绑定对象的填报信息。如果设置了setDataSource,需要建立数据源的模型,非常的麻烦。
这里有一个进阶小技巧教给大家,可以大大的减少组织一个空白数据源的时间。
首先我们举一个单元格绑定的例子:
例如下图所示的绑定模板:
我们绑定了姓名(name),年龄(age),性别(sex)三个字段,这个时候我们需要做一个空白的模板来进行填报。按照数据绑定的逻辑我们需要setDataSource,转一个这样的数据源。{name:"",age:"",sex:""}但是,这么做会有两个问题,一,通过getDataSource获取填报内容时,没有填报的填报项获取出来的内容是一个空串。我们需要额外对空串单独处理。二,如果数据字段很多的话,组织dataSource是一件很麻烦的事情。
这里有一个进阶小技巧,我们在setDataSource的时候可以直接给一个空对象{},如下面代码所示。
var data = {};
var source = new GC.Spread.Sheets.Bindings.CellBindingSource(data);填报后我们通过getDataSource,获取数据源时,SpreadJS会默认自动在这个空对象中按照绑定的映射关系进行组织。
另外,表格绑定时会稍微麻烦一些,因为表格本身有一个bindingpath的设置,表格中的每一列的dataField是在这个bindingpath的下一级。这样我们给予的dataSource需要对应的有一些调整,例如下面的例子:我们在设计器上设置了一个表格绑定,如下所示
该table中绑定了4个字段:name,age,sex,phone。通过person绑定在table上。
这个时候我们创建dataSource的时候就不能给予一个空对象{}了,因为多了person这一级,而且person本身的结构是一个数组,这个时候我们就需要对此作出调整
var data = {"person":[{}]};这里需要给到person这一级,需要表名person是一个对象数组,这样后续直接在table中填报的信息就可以被SpreadJS自动填充在person中。通过getDataSource方法就可以直接获取到了。如下图所示:
页:
[1]