功能介绍:    
1、利用帆软报表之所报表时候,有时候需要在填报模式下运行,可是填报模式下没有分页;另说,如果数据过多,需要通过分页查询来提高查询效率,改善用户体验。因此需要用到分页查询。
2、当多个sheet,切换sheet时,需要面板做出相应改变,此时需要自定义一些js函数。
一、定义模板参数
为了满足多个sheet同时实现自定义分页,需要在模板参数处定义如下参数:
page1:sheet1对应的当前显示页数
page2:sheet2对应的当前显示页数(·······再有多个sheet,递增即可)
amount:每页显示个数
sheet:当前sheet索引,目的在于记录当前所选sheet,以便于判断不用sheet,从而做出相应操作
同时为了以后操作的便利,在面板上可以添加对应以上四个参数对应的控件,调整为不可见

二、在每个sheet页面中添加一行隐藏行

由于填报模式下没有页数操作功能,因此需要自定义添加一些按钮。该隐藏行中可以作为页码等信息的暂存空间。
A1:上一页页码
A2:下一页页码
A3:总页数
A4:当前页码
A5:斜线‘/’
注意,此行要做隐藏,选中此行,右键就有“隐藏”选项

三、添加自定义按钮以及JS事件

1、打开‘模板Web属性’
2、选中‘填报页面设置’,修改2)为‘为模板单独设置‘,3)中是前面七个是添加的自定义按钮;通过4)按钮进行设置;5)操作是添加‘加载结束’事件;接下来详细讲述每个步骤;
3、点击4)之后弹出下面页面,自上而下七个按钮分别为首页、上一页、页码显示框、斜杠、总页数、下一页、末页
通过‘编辑’按钮可以改图标,然后依次添加自定义事件
自定义事件:
首页:
var sheet = _g().parameterEl.getWidgetByName('sheet').getValue();
if(sheet==1)
{
_g().parameterEl.getWidgetByName('page1').setValue(1);
}else{
_g().parameterEl.getWidgetByName('page2').setValue(1);
}
_g().parameterEl.getWidgetByName('Search').fireEvent('click');//Search为查询按钮的名字
上一页:
var beforepage = contentPane.curLGP.getCellValue("A1");
if(beforepage > 0){
var sheet = _g().parameterEl.getWidgetByName('sheet').getValue();
if(sheet==1)
{
_g().parameterEl.getWidgetByName('page1').setValue(beforepage);
}else{
_g().parameterEl.getWidgetByName('page2').setValue(beforepage);
}
_g().parameterEl.getWidgetByName('Search').fireEvent('click');
}
页码显示框:
var toolbar = contentPane.toolbar;        
var items = toolbar.options.items;      
var customButton = items[2];
var inner = customButton.$btnWrap;
var btnWrapper = $("em", inner);
var $input = $("input", btnWrapper);
//取这个控件
$input.blur(function() {
var targetpage = $input.val();
var endpage = contentPane.curLGP.getCellValue("C1");
if (parseInt(targetpage) > parseInt(endpage) || parseInt(targetpage) < parseInt(1)) {
alert("你输出的页数不再指定范围内");
} else
var sheet = _g().parameterEl.getWidgetByName('sheet').getValue();
if(sheet==1)
{
_g().parameterEl.getWidgetByName('page1').setValue(targetpage);
}else{
_g().parameterEl.getWidgetByName('page2').setValue(targetpage);
}
_g().parameterEl.getWidgetByName('Search').fireEvent('click');
});
斜杆:无
总页数:无
下一页:
var nextpage = contentPane.curLGP.getCellValue("B1");
var endpage = contentPane.curLGP.getCellValue("C1");
if(nextpage<=endpage){
var sheet = _g().parameterEl.getWidgetByName('sheet').getValue();
if(sheet==1)
{
_g().parameterEl.getWidgetByName('page1').setValue(nextpage);
}else{
_g().parameterEl.getWidgetByName('page2').setValue(nextpage);
}
_g().parameterEl.getWidgetByName('Search').fireEvent('click');
}
末页:
var endpage = contentPane.curLGP.getCellValue("C1");
var sheet = _g().parameterEl.getWidgetByName('sheet').getValue();
if(sheet==1)
{
_g().parameterEl.getWidgetByName('page1').setValue(endpage);
}else{
_g().parameterEl.getWidgetByName('page2').setValue(endpage);
}
_g().parameterEl.getWidgetByName('Search').fireEvent('click');
4、添加‘结束事件’
如下:
var toolbar = contentPane.toolbar;
var items = toolbar.options.items;
//JQUERY取我们的工具栏上的按钮.items[2]代表的是第三个,也就是那个显示成文本框按钮。
var customButton=items[2];
var inner = customButton.$btnWrap;
var btnWrapper = $("em", inner);
//修正这个按钮的属性,让它变成文本类型,居中,鼠标放上次图标是编辑状态。
btnWrapper.html("<input data-role='none' type='text'  class='fr-texteditor' style='width: 42px; height: 16px; text-align: center;'>");
//获取D1单元格的值就是page,也就是当前页。
var cellValue = contentPane.curLGP.getCellValue("D1");
var $input = $("input", btnWrapper);
//给这个文本控件复制,用的是JQUERY的方法,可以COPY。
$input.val(cellValue);
var total=contentPane.curLGP.getCellValue("C1");
//把总页数显示在第5个控件上,因为这个数值可能是小数,所以判断下要不要加一处理。
contentPane.toolbar.options.items[4].setText(total);
//把斜线写在第4个控件上。
contentPane.toolbar.options.items[3].setText(contentPane.curLGP.getCellValue("E1"));
$(".fr-sheetbutton-container").click(function()//切换sheet时  
{var a=contentPane.$contentPane.data('TabPane').tabBtns[contentPane.selectedIndex].options.name;//获取当前sheet的名字  
if(a=="sheet1")  //表示第一个sheet,sheet1需要替换成自己对应的sheet名称
{   
_g().parameterEl.getWidgetByName('sheet').setValue(1);
//当前sheet需要显示或者隐藏的 控件
_g().parameterEl.getWidgetByName('当前面板所需要显示的控件名称').setVisible(true);    
_g().parameterEl.getWidgetByName('当前面板所需要隐藏的控件名称').setVisible(true);    
//获取D1单元格的值就是page,也就是当前页。
cellValue = contentPane.curLGP.getCellValue("D1");
//给这个文本控件复制,用的是JQUERY的方法,可以COPY。
$input.val(cellValue);
var total=contentPane.curLGP.getCellValue("C1");
//把总页数显示在第5个控件上,因为这个数值可能是小数,所以判断下要不要加一处理。
contentPane.toolbar.options.items[4].setText(total);
}  
else
{  
_g().parameterEl.getWidgetByName('sheet').setValue(2);
//当前sheet需要显示或者隐藏的 控件
_g().parameterEl.getWidgetByName('当前面板所需要显示的控件名称').setVisible(true);    
_g().parameterEl.getWidgetByName('当前面板所需要隐藏的控件名称').setVisible(true);    
//获取D1单元格的值就是page,也就是当前页。
cellValue = contentPane.curLGP.getCellValue("D1");
//给这个文本控件复制,用的是JQUERY的方法,可以COPY。
$input.val(cellValue);
var total=contentPane.curLGP.getCellValue("C1");
//把总页数显示在第5个控件上,因为这个数值可能是小数,所以判断下要不要加一处理。
contentPane.toolbar.options.items[4].setText(total);
}
});  
四、添加模板数据集
1、oracle分页查询sql语句:
SELECT * FROM  
(  
SELECT A.*, ROWNUM RN  
FROM (SELECT * FROM table_name) A  
WHERE ROWNUM <= ${page}*${amount}  
)  
WHERE RN >= ((${page}-1)*${amount})+1
2、查询总页数sql语句:
SELECT ceil(count(*)/${amount}) as totalpage FROM table_name
注意:如果需要添加where条件,一定两条语句同时添加
五、面板设计
关于查询面板设计,不多做说明。多sheet切换时改变面板显示的功能在 (三).4 中的‘加载结束’事件的js代码中有说明。自行理解应用。

转载于:https://www.cnblogs.com/zhiji8023/p/11153271.html

帆软报表(多sheet)自定义分页查询相关推荐

  1. 帆软报表学习笔记——根据参数查询

    帆软(FineReport)是一款非常快捷方便的报表软件,最近跟着公司后面做一个仓储收费管理系统,后期需要用得到各种费用的计算已经表格导出,所以乘着现在有空学习一个帆软的简单操作以及使用. 软件的下载 ...

  2. [财务][数据化分析][帆软]报表设计-分页预览

    [财务][数据化分析][帆软]报表设计-分页预览 1. 概述 分页预览即普通预览模式,FineReport 的默认预览方式,一般在只需要查看报表数据用于分析的时候使用. 下面我们以内置的 Gettin ...

  3. 帆软报表填报自定义提交-后台数据解析保存详解

    帆软报表填报前期步骤按api或者百度就可以完成,今天我这里着重讲解自定义提交(访问web后台服务进行提交). 填报提交有两种方式: 1)内置SQL:没什么难度,按教程来就行. 2)自定义提交:对应后台 ...

  4. 帆软报表获取单元格的值的几种方式,包括分页预览,填报预览,新填报预览

    帆软报表获取单元格的值的方式在分页预览,填报预览,新填报预览都是不同的,没有统一的方式,这给使用者带来一定的不便.现在总结一下. 分页预览: getCellValue: function (cellP ...

  5. [财务][数据化分析][帆软]报表设计-填报预览

    [财务][数据化分析][帆软]报表设计-填报预览 1. 概述 填报预览,顾名思义,就是指在 Web 端预览用来填报数据的模板,一般在只需要录入修改数据的时候使用,当然也可用来查看数据. 下面我们以内置 ...

  6. [财务][数据化分析][帆软]报表设计-第一张报表

    今天说一下帆软的弊端,优势什么的请自己去发现,使用了这么久帆软了,唯一感觉的是赶紧找一台服务器安装上,本机跑太消耗内存了. 如果你数据量大并发量大,请最少128G内存起步.这个不是帆软的错,是Java ...

  7. 帆软报表调用python脚本_帆软报表(finereport)实现自动滚屏效果

    例如Demo:IOS平台年度数据报表. 展示内容丰富,一个页面中存在多个图表.内容,超出了浏览器窗口的大小导致内容展示不全. 为了能够预览这个报表的全部内容,可以使用JS滚屏效果来实现. 操作步骤: ...

  8. FineReport(二)帆软报表图表的

    一.关于帆软报表柱状图单列柱状图的用法 1.首先我们打开设计器新建一张模版 2.选中一片区域进行单元格合并,为图表做好区域准备 3.在区域进右键,单元格元素,选择插入图表 4.这里我们先选择柱状图 5 ...

  9. 帆软报表(FineReport) 的初步学习和使用

    我们公司在做ERP项目,我是根据项目进行的学习,常用知识点记录如下: 1,FineReport 使用时的配置 帆软报表 ->服务器->定义数据连接->写入数据数据库的连接URL,用户 ...

  10. 帆软报表开发学习笔记(八)

    `帆软报表开发学习笔记` 报表特性_超级链接(20200928) 报表特性_条件属性(20200929) 报表特性_导出(20200930) 报表特性_打印(20201001) 报表特性_编码专题(2 ...

最新文章

  1. win8+ubuntu,ubuntu中打开NTFS文件
  2. mixin机制 vue_读?VuePress(四)插件机制
  3. 最全面的JavaScript调试技巧总结
  4. 两个运放制作加法器_集成运放电路设计原理图
  5. 【网寻】mui - 点击事件
  6. android中判断设备定位状态
  7. python自动化部署程序,聊聊Python自动化脚本部署服务器全流程(详细)
  8. java垃圾回收到老年代次数,Java垃圾回收之回收算法
  9. zk4元年拆解_科比5 Protro开箱测评 zk5元年拆解赏析
  10. Spring-01-IOC控制反转/DI依赖注入
  11. Office在线预览,PPT在线预览,word在线预览,Excel在线预览,PDF在线预览
  12. CAP、BASE理论
  13. android定义圆角layout,Android布局切圆角
  14. Python 将汉字转为拼音
  15. 大文件分割工具,QT实现
  16. 如何录制音频文件mp3?给你推荐好用的几款音频录制软件
  17. Android应用开发之PNG、IconFont、SVG图标资源优化详解
  18. JetpackCompose从入门到实战学习笔记2——Modifier的简单使用
  19. Android application 和 activity 标签详解
  20. df和du显示的磁盘空间使用情况不一致的原因及处理

热门文章

  1. python做考勤表_500行Python代码打造刷脸考勤系统,其实也就那么简单
  2. 计量数据分析数据库-计量分析资料大全空间计量分析资料大全
  3. 百会ZOHO发布基于SaaS面向中小企业的CRM平台
  4. Mac 上有哪些值得推荐的软件?冷门小众软件但实用
  5. 火狐firefox扩展插件开发extension代码调试方法
  6. 什么是Csrss.exe进程?此进程有何作用?
  7. Android基础入门教程——10.3 AudioManager(音频管理器)
  8. hualinux 学生党 建议:读书就是为了社会目标做准备
  9. ubuntu搭建无盘服务器,ubuntu配置无盘服务器
  10. wordpress怎么修改地址栏小图标