1. 问题描述编辑
对于填报网格式报表,每行前面有个复选框,希望实现点击页面中设置的打印按钮可以将选中的复选框中的值按照一定的样式打印,如分栏、页面固定显示几行等格式。
2. 实现思路编辑
可以定义另外一个有固定格式的模板,此模板的数据是根据填报网格式报表中选中的值进行过滤,而在填报网格式报表中则需要在按钮的点击事件中定义js,js首先要获取选中行的数据,然后调用FineReport内置的打印方法,将选中的值以参数的方式加入到打印方法的URL中传到被打印的模板中。
步骤:
1.数据分析或填报复选框网络式报表如下 在A3新建控件复选框并设置左父格为B3,报表明细略
2.在B1处新建按钮控件命名为打印并设置JS点击事件 代码如下
- var $span = $('.fr-checkbox-checkon'); //获取选中的复选框
- var darray = [];
- var $tds = $("td").has($span); //获得选中复选框的单元格
- for (var i = 0, len = $tds.length; i < len; i ++) { //遍历选中的单元格
- var id = $($tds[i]).attr("id"); //给选中的单元格增加id属性
- var idn = id.replace("A","B"); //将复选框所在的A列换成客户编号所在的B列
- var vv=document.getElementById(idn).innerHTML; //获取选中单元格所在B列的数据
- darray.push(vv);
- //document.write(darray) //传出的值为'ZJ0001','ZJ0002'
- }
- FR.doURLPDFPrint("${sevletURL}ReportServer?reportlet=/doc/Form/FormFAQ/PrintCol.cpt&ID="+darray); //调用打印方法,URL为之前做好的模板路径 ;模版路径为自己 的实际路径
注:若获取的vv值为字符串,要将其放入数组中则需要修改成darray.push("'"+vv+"'")。
3. 新建打印模板CPT ,数据集如下SELECT * FROM 订单 where 订单ID in (${ID})。ID接受darray的传值,该值是可以数值或字符串
如果网格表中参数是字符应将JS代码中的第8行的 darray.push(vv) 换成darray.push("'"+vv+"'");传出来的就是字符串值,所以打印模板的数据集参数 ${ID} 不用添加‘ ’;添加只能传单个无法一次值入多个
4.选中复选框打印调用打印方法并传入查询参数获取数据
填报JS复选框选中传值的,可能冻结行 或不能冻结列