帆软报表(多sheet)⾃定义分页查询
功能介绍:
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().WidgetByName('sheet').getValue();
if(sheet==1)
{
_g().WidgetByName('page1').setValue(1);
}else{
_g().WidgetByName('page2').setValue(1);
}
_g().WidgetByName('Search').fireEvent('click');//Search为查询按钮的名字
上⼀页:
var beforepage = CellValue("A1");
if(beforepage > 0){
var sheet = _g().WidgetByName('sheet').getValue();
if(sheet==1)
{
_g().WidgetByName('page1').setValue(beforepage);
}else{
_g().WidgetByName('page2').setValue(beforepage);
}
_g().WidgetByName('Search').fireEvent('click');
}
页码显⽰框:
var toolbar = lbar;
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 = CellValue("C1");
if (parseInt(targetpage) > parseInt(endpage) || parseInt(targetpage) < parseInt(1)) {
alert("你输出的页数不再指定范围内");
} else
var sheet = _g().WidgetByName('sheet').getValue();
if(sheet==1)
{
_g().WidgetByName('page1').setValue(targetpage);
}else{
_g().WidgetByName('page2').setValue(targetpage);
}
_g().WidgetByName('Search').fireEvent('click');
});
斜杆:⽆
总页数:⽆
下⼀页:
var nextpage = CellValue("B1");
var endpage = CellValue("C1");
if(nextpage<=endpage){
var sheet = _g().WidgetByName('sheet').getValue();
if(sheet==1)
{
_g().WidgetByName('page1').setValue(nextpage);
}else{
_g().WidgetByName('page2').setValue(nextpage);
}
_g().WidgetByName('Search').fireEvent('click');
}
末页:
var endpage = CellValue("C1");
var sheet = _g().WidgetByName('sheet').getValue();
if(sheet==1)
{
_g().WidgetByName('page1').setValue(endpage);
}else{
_g().WidgetByName('page2').setValue(endpage);
}
_g().WidgetByName('Search').fireEvent('click');
4、添加‘结束事件’
如下:
var toolbar = lbar;
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 = CellValue("D1");
var $input = $("input", btnWrapper);
//给这个⽂本控件复制,⽤的是JQUERY的⽅法,可以COPY。
$input.val(cellValue);
var total=CellValue("C1");
//把总页数显⽰在第5个控件上,因为这个数值可能是⼩数,所以判断下要不要加⼀处理。
//把斜线写在第4个控件上。
$(".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().WidgetByName('sheet').setValue(1);
//当前sheet需要显⽰或者隐藏的控件
_g().WidgetByName('当前⾯板所需要显⽰的控件名称').setVisible(true);
_g().WidgetByName('当前⾯板所需要隐藏的控件名称').setVisible(true);
//获取D1单元格的值就是page,也就是当前页。
cellValue = CellValue("D1");
//给这个⽂本控件复制,⽤的是JQUERY的⽅法,可以COPY。
$input.val(cellValue);
var total=CellValue("C1");
//把总页数显⽰在第5个控件上,因为这个数值可能是⼩数,所以判断下要不要加⼀处理。
}
else
{
_g().WidgetByName('sheet').setValue(2);
//当前sheet需要显⽰或者隐藏的控件
_g().WidgetByName('当前⾯板所需要显⽰的控件名称').setVisible(true);
_g().WidgetByName('当前⾯板所需要隐藏的控件名称').setVisible(true);
//获取D1单元格的值就是page,也就是当前页。
cellValue = CellValue("D1");
//给这个⽂本控件复制,⽤的是JQUERY的⽅法,可以COPY。
$input.val(cellValue);
var total=CellValue("C1");
/
/把总页数显⽰在第5个控件上,因为这个数值可能是⼩数,所以判断下要不要加⼀处理。
}
});
四、添加模板数据集
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代码中有说明。⾃⾏理解应⽤。