本文以填报报表为例,通过分页的方式,来解决大数据集展示的问题。

实现的思想就是通过在SQL里筛选部分数据库数据,以达到浏览器可以合理的展示报表页面。(数据分段,语句我这采用的是MYSQL,如果要用其他数据库,请查看FineReport帮助文档)

步骤一:打开fenye.cpt文件。

模板界面如下

两个ds,和一部分数据,及隐藏的一行。

隐藏一行内容如下

这里数据的功能会在下面说起。

ds1 里的内容如下

语句内容 SELECT * from aaa limit ${f},${p}

目的是从第${f}跳开始,选择${p}数据(这个$p就是展示的页数,$f的计算可以下面公式($page-1)*$p,mysql的limit的偏移量是从0开始)。

在模板参数里,我设置了他们的默认值

$P=20

$page=1;

这个和全局参数同理,在模板预览的时候是看不到数据的,必须到展示页面的时候参数才通过url传进来。

ds2里的内容如下

这个语句就比较简单就是求数据总数再除以每页页数,就能得到总页数。

报表主体

第一行的数据分别是前一页,后一页,总页数和当前页以及一个/,用来在工具栏里展示上一页和下一页等操作使用的,这里正常是不显示的,所以我们先屏蔽了(隐藏)。其他的就是用户数据的展示了。

为了展示报表能和我们正常报表一样,我们还需要做什么?

这里就需要写代码能实现上图的效果了。

点开填报预览的齿轮

可以看到我们这里用了7个自定义按钮和一个加载结束事件

加载结束事件的代码如下:

var toolbar = contentPane.toolbar;

var items = toolbar.options.items;

var customButton=items[2];//JQUERY取我们的工具栏上的按钮.items[2]代表的是第三个,也就是那个显示成文本框按钮。

var inner = customButton.$table;

var btnWrapper = $("em", inner);

btnWrapper.html("<input data-role='none' type='text'  class='fr-texteditor' style='width: 42px; height: 16px; text-align: center;'>");

//修正这个按钮的属性,让它变成文本类型,居中,鼠标放上次图标是编辑状态。

var cellValue = contentPane.curLGP.getCellValue("D1");//获取D1单元格的值就是page,也就是当前页。

var $input = $("input", btnWrapper);

$input.val(cellValue);//给这个文本控件复制,用的是JQUERY的方法,可以COPY。

var total=contentPane.curLGP.getCellValue("C1");

if (total>parseInt(total)){total=parseInt(total)+1;

}

contentPane.toolbar.options.items[4].setText(total);

//把总页数显示在第5个控件上,因为这个数值可能是小数,所以判断下要不要加一处理。

contentPane.toolbar.options.items[3].setText(contentPane.curLGP.getCellValue("E1"));

//把斜线写在第4个控件上。

7个自定义按钮:

第一个首页:

代码如下:

window.location.href="${servletURL}?reportlet=fenye.cpt&op=write&page=1";//链接到fenye.cpt,page 参数=1,代表第一页。

第二个上一页:

代码如下:

var page= $("tr[tridx=0]","div.content-container").children().eq(0).html();  //取第一行第一个单元格内容。

if(page==0)

{

this.setEnable(false);

alert("页面超出指定的范围");

}

else

window.location.href="${servletURL}?reportlet=fenye.cpt&op=write&page="+page//如果没有小于1就正常跳转,否则显示页面超过指定的范围,这个控件设置不可以使用。

第三个可以跳转的当前页:

var toolbar = contentPane.toolbar;

var items = toolbar.options.items;

var customButton=items[2];

var inner = customButton.$table;

var btnWrapper = $("em", inner);

var $input = $("input", btnWrapper);

//取这个控件

$input.blur(function(){

var toolbar = contentPane.toolbar;

var items = toolbar.options.items;

var customButton=items[2];

var inner = customButton.$table;

var btnWrapper = $("em", inner);

var $input = $("input", btnWrapper);

var page=$input.val();

var total=$("tr[tridx=0]","div.content-container").children().eq(2).html();

if (total>parseInt(total)){total=parseInt(total)+1;

}

if(parseInt(page) > parseInt(total) || parseInt(page) < parseInt(1) )

{

alert("你输出的页数不再指定范围内");

}

else

window.location.href="${servletURL}?reportlet=fenye.cpt&op=write&page="+page

});

//失去焦点后输入的值是不是在指定的范围内,如果在跳转到指定页面,就在else后面的URL,否则输出你的输出页面不对提示。失去焦点代表就是点击其他地方或者点击TAB键。

第四个斜线:
这个在加载时间里处理了。这边不需要处理。
第五个总页数:
这个在加载时间里处理了。这边不需要处理。
第六个下一页:
var page= $("tr[tridx=0]","div.content-container").children().eq(1).html();  
var total=$("tr[tridx=0]","div.content-container").children().eq(2).html(); 
//JQURUY取下一页和总页数
      if (total>parseInt(total)){total=parseInt(total)+1;
     }
//判断总页数是不是整数,不是加一
      if(parseInt(page) > parseInt(total))
  {
this.setEnable(false);
alert("页数超出指定范围内");
}
else
window.location.href="${servletURL}?reportlet=fenye.cpt&op=write&page="+page
//如果下一页在这个范围就跳转到那里

这个控件不可用,输出出错。
第七个末页:
代码如下:
var total=$("tr[tridx=0]","div.content-container").children().eq(2).html();  
//取总页数。
if (total>parseInt(total)){total=parseInt(total)+1;
}
window.location.href="${servletURL}?reportlet=fenye.cpt&op=write&page="+total
//判断总页数是不是整数,不是加一,并跳转到最后一页。
显示控件的名称需要在别名里添加下

FineReport层式报表解决大数据集展示问题攻略相关推荐

  1. Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略

    Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略 目录 graph_feature函数:为给定的特征生成特征谱系图

  2. 捣蛋鹅显示服务器已满,无题大鹅模拟奖杯攻略分享

    捣蛋鹅成就怎么解锁?游戏章节不是很长,不同章节中都有不同的奖杯需要解锁,有些比较简单,有的需要一点点技巧,小编这里给大家带来了"PSN lyplyp_lll"总结的无题大鹅模拟奖杯 ...

  3. 棒棒糖球球机器人_球球大作战刷棒棒糖_球球大作战刷龙蛋攻略

    玩过球球大作战的玩家们都知道我们要获得棒棒糖和龙蛋是很不容易的,那么游戏中我们要怎么免费获得龙蛋和棒棒糖呢,而通过怎么才能快速获得龙蛋和棒棒糖,同时通过刷的方式要怎么操作呢,接下来就由小编一起来详细给 ...

  4. LLMs:自然语言处理领域—大语言模型的涉及四大技术领域(TL/USL/PT+Fine/Seq2Seq)、十大核心组件之详细攻略

    LLMs:自然语言处理领域-大语言模型的涉及四大技术领域(TL/USL/PT+Fine/Seq2Seq).十大核心组件之详细攻略 目录 LLMs涉及技术领域的简介 1.多任务学习 2.迁移学习:特征提 ...

  5. 玄元剑仙服务器列表为空,玄元剑仙大氪玩家新服攻略

    玄元剑仙是一款非常不错的修仙游戏,游戏中新服大氪玩家怎么玩比较好呢?下面小编为大家带来玄元剑仙大氪玩家新服攻略,一起看看吧. 首先选区,既然都3000+的了肯定选个新开的区,起码不能比别人在进区上慢很 ...

  6. 如何高效制作数据可视化大屏,大屏高效制作攻略分享,总有一款适合你

    做数据可视化大屏可不是一件简单的事情,里面有很多技巧,像布局,配色,图表和素材的选用和搭配等等,里面有很多学问.一时半会也做不出一个大屏,即使你会做也需要一定的时间和精力,在大量的需求下,只能熬夜完成 ...

  7. 2018阿里云双11拼团大促主会场全攻略

    云栖君导读:在双十一这个一年唯一一次的大幅度降价促销日,怎样才能花最少的钱配置最特惠的云服务?云栖社区特为各位开发者奉献出省钱大法如下! 2018阿里云双十一拼团大促活动已经于10月29日正式开启,从 ...

  8. 2019阿里云开年Hi购季大促主会场全攻略!

    2019阿里云云上采购季活动已经于2月25日正式开启,从已开放的活动页面来看,活动分为三个阶段: 2月25日-3月04日的活动报名阶段.3月04日-3月16日的新购满返+5折抢购阶段.3月16日-3月 ...

  9. 执业药师考试难度大吗丨备考攻略

    执业药师考试难度大吗? 要看执业药师考试难易程度,就得从全国执业药师考试合格率来查看,要想通过考试,就要对考试中的细节做一个详细的分析,才好做复习计划. 每个人的基础能力和学习能力都不一样,在根据每个 ...

最新文章

  1. 使用阿里云配置管理ACM实现zookeeper依赖服务的透明Failover迁移
  2. .net中语音识别和语音合成(二)语音合成提高篇
  3. 列举6个常见且实用的Web前端性能优化方法
  4. VC++ 6.0 C8051F340 USB PC侧通信 Demo
  5. 学计算机的如何学英语,怎么在电脑上学习英语
  6. java int比较用==,整数-在Java中使用==运算符比较包装对象
  7. 确定了C/C++的学习路线之后,便只能是一条路走到黑了
  8. 【ElasticSearch】es ResourceWatcherService 的 初始化 启动 源码解析
  9. C# 理解Thread.Sleep()方法 ----转帖
  10. ruby学习笔记(11)--symbol与hash参数
  11. 计算机算法设计与分析 大学生电影节观影问题
  12. Labview 中的类
  13. CorelDRAW2021版本下载 百度网盘
  14. python的常用标准库
  15. 层次分析法(附实例)
  16. 百度AI之百度图像识别java版本使用
  17. 巧用千寻位置GNSS软件| 点放样操作指南
  18. JS/JQ实现页面跳转
  19. 代码Review工具upsourse的部署
  20. 论文阅读——用于脑机接口的运动意图和运动想象脑电数据分析研究

热门文章

  1. 数字积分法插补c语言程序,数字积分法插补原理
  2. 删除不需要的(辅助)SQL Server事务日志文件
  3. SQL Server维护计划–好处,功能和特性
  4. sql活动监视器 死锁_使用system_health扩展事件监视SQL Server死锁
  5. 浅谈Java的Nio以及报Connection refused: no further information异常原因?
  6. TCP/IP学习笔记(3)----IP,ARP,RARP协议
  7. C# 实现系统关机、注销、重启、休眠、挂起
  8. JaveScript用二分法与普通遍历(冒泡)
  9. 在 Linux 中安装 VMware Tools
  10. [.net基础]访问修饰符