帆软报表 SQL分页查询 + 导出全部Excel

参数说明:

        模版参数:gPageSize=每页显示数量、gPageNo=当前页数

        数据集结果:totalcnt=总数、totalpage=总页数

1、创建数据集:

1.1、主数据集

-- 添加分页内容
${if(len(gPageNo)=0,"","limit "+((gPageNo-1)*gPageSize)+","+gPageSize)}

1.2、页码数据集pagetool

select
    count(1) as totalcnt,        -- 总数
    ceiling(count(1)*1.0/${gPageSize}) as totalpage        -- 总页数
 from table

2、定义参数

设置每页数量gPageSize默认10,页码gPageNo默认1,上线的时候隐藏

3、自定义工具栏

3.1、工具栏内容

打开模板>模板web属性>分页预览设置,选择为该模板单独设置,将默认的工具栏按钮全部清除掉,然后依次添加两个自定义按钮,一个邮件按钮,两个自定义按钮,一个Word格式,一个PDF按钮。如下所示:

注:使用具体格式按钮,如邮件、Word格式、PDF按钮是为了JS直接使用控件名称获取空间方便修改其内容;

3.2、工具栏按钮说明

第一个自定义按钮-首页,自定义其事件:

_g().parameterEl.getWidgetByName("gPageNo").setValue(1);
_g().parameterCommit();

第二个自定义按钮-上一页,自定义其事件:

var pageno = _g().parameterEl.getWidgetByName("gPageNo").getValue();
_g().parameterEl.getWidgetByName("gPageNo").setValue(pageno - 1);
_g().parameterCommit();

第三个自定义按钮-下一页,自定义其事件:

var pageno = _g().parameterEl.getWidgetByName("gPageNo").getValue();
_g().parameterEl.getWidgetByName("gPageNo").setValue(pageno*1 + 1);
_g().parameterCommit();

第四个自定义按钮-末页,自定义其事件:

var totalpage = FR.remoteEvaluate("=value('pagetool',2,1)");
_g().parameterEl.getWidgetByName("gPageNo").setValue(totalpage);
_g().parameterCommit();

3.3、工具栏事件

添加加载结束后事件,设置工具栏内容:

setTimeout(function() {
    
    var totalcnt = FR.remoteEvaluate("=value('pagetool',1,1)");
    var totalpage = FR.remoteEvaluate("=value('pagetool',2,1)");
    // console.log(totalcnt + "-" + totalpage);
 
    var pageno = _g().parameterEl.getWidgetByName("gPageNo").getValue();
    var pagesize = _g().parameterEl.getWidgetByName("gPageSize").getValue();
    // console.log(pageno + "-" + pagesize);

    // 当前页
    var currentpageStr = "<input id='currentpage' min='1' type='number' style='width:50px;margin-left:5px;'/><label id='totalpage' style='font:400 14px Arial;'></label>";
    // 数据总量
var totalcntStr = "<label id = 'totalcnt' style='font:400 14px Arial;margin-left:5px;'> </label>";
    // 总页
    var pagesizeStr = "<label style='font:400 14px Arial;margin-left:5px;'>每页显示条数:</label><input id='pagesize' min='10' max='100' type='number' style='width:50px'/><label style='padding-right:20px'></label>";
 
    // 工具栏内容设置
    $("#fr-btn-Email").replaceWith(currentpageStr);	 // 邮件
    $("#fr-btn-Word").replaceWith(totalcntStr);	// Word格式
    $("#fr-btn-PDF").replaceWith(pagesizeStr);	// PDF

    document.getElementById('totalcnt').innerHTML="数据总量:" + totalcnt;
    $("#currentpage").val(pageno);
    $("#currentpage").attr("max", totalpage);
    $("#currentpage").attr("val", pageno);
    $("#totalpage").text(" / " + totalpage);
    $("#pagesize").val(pagesize);
 
    // 切换页码
    $("#currentpage").change(function() {
        var val = $(this).val();
        // alert(val);
        if (val < 1 || val > totalpage) {
            $(this).val(pageno);
        } else {
			// 查询
			_g().parameterEl.getWidgetByName("gPageNo").setValue(val);
			_g().parameterCommit();
        }
    });
 
    // 切换每页个数
    $("#pagesize").change(function() {
        var val = $(this).val();
        // alert(val);
        if (val < 10 || val > 100) {
            $(this).val(pagesize);
        } else {
			// 查询
			_g().parameterEl.getWidgetByName("gPageSize").setValue(val);
			_g().parameterCommit();
        }
    });

 
}, 10);

4、导出全部功能

因为sql分页查询,帆软自带的导出功能只能导出当前展示页的数据,所以就要自定义按钮做导出。

还是去web模板去添加自定义按钮

自定义按钮-导出全部,自定义其事件:

//获取当前时间
var nowdate = new Date();
var year = nowdate.getFullYear(),
	month = nowdate.getMonth() + 1,
	date = nowdate.getDate(),
	day = nowdate.getDay(),
	week = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
	h = nowdate.getHours(),
	m = nowdate.getMinutes(),
	s = nowdate.getSeconds();

//year + "年" + month + "月" + date + "日" + week[day] + " " + h +":" + m + ":" + s;  

var strDate = year + "年" + month + "月" + date + "日" + h + "时" + m + "分";

//查询条件字段名称
var widgetNames = [
	'name',
	'gh'
];


function getWidgetValueByName(name) {
	var widget = _g().parameterEl.getWidgetByName(name); //根据控件名获取控件值

	if (widget == undefined) return;
	var obj = {};
	obj[name] = widget.getValue();
	return obj; //返回控件值组成的数组
}
var paramJson = widgetNames.map(getWidgetValueByName).reduce(function(a, b) {
	return Object.assign(a, b)
});
var paramJsonStr = JSON.stringify(paramJson); //将json数据转换为字符串
//alert(paramJsonStr);
//return;
//参数进行url编码
var colNames = encodeURIComponent('')
//调用导出接口  这里的ds2是数据集名称
_g().directExportToExcel("ds2", "人员信息表_" + strDate, encodeURIComponent(paramJsonStr), colNames);

导出用的是ds2数据集

 

效果展示

因为我用的版本是太低,在网上参考11版本:https://blog.csdn.net/liu523577232/article/details/132076676 无法使用所以就自己改了下

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值