润乾报表提供的报表组功能,可以实现在同一页面上套表的统一展现,通过tab标签来进行各表之间的切换。如下图所示:

但由于各系统的风格不同,我们给出的默认tab样式可能无法符合当前系统的整体风格,这时就需要对tab样式进行自定义。比如:

下面就详细说明如何自定义报表组的tab样式。
首先,当使用润乾<report:Group>标签发布报表组时,后台会根据报表组内报表的逻辑名生成如下代码:
<style>
#rq_tabs {background:#F4F7FB;font-size:12px;font-family:宋体;line-height:normal;border-bottom:1px solid #BCD2E6; }
#rq_tabs label { margin:0;padding:0; }
#rq_tabs a { float:left;background:url(”http://127.0.0.1:6001/demo/images/rq_tableft1.gif”) no-repeat left top;margin:0;padding:0 0 0 4px;text-decoration:none;}
#rq_tabs a span { float:left;background:url(”http://127.0.0.1:6001/demo/images/rq_tabright1.gif”) no-repeat right top;padding:5px 15px 4px 6px;color:black; }
#rq_tabs a:hover { background-position:0% -42px; }
#rq_tabs a:hover span { background-position:100% -42px; color:black; }
#rq_tabs label.rq_curr a { background-position:0% -42px; }
#rq_tabs label.rq_curr a span { background-position:100% -42px; color:black; }
</style>
<div style=’padding-bottom:1px’><table cellspacing=0 cellpadding=0 border=0><tr><td id=rq_tabs currTableId=”item1″ tables=”item1,item2,item3″ style=”padding:
1px 2px 0 2px” nowrap>
<label id=”tab_item1″ reportId=”item1″ onclick=_groupClicked(this) class=rq_curr><a href=” onclick=’return false;’><span>tab1 contents</span></a></label>
<label id=”tab_item2″ reportId=”item2″ onclick=_groupClicked(this)><a href=” onclick=’return false;’><span>tab2 contents</span></a></label>
<label id=”tab_item3″ reportId=”item3″ onclick=_groupClicked(this)><a href=” onclick=’return false;’><span>tab3 contents</span></a></label>
</td></tr></table></div>
其中<style>内是对tab标签栏(rq_tabs)的样式设定,下面的三个<label>是发布的报表组内的三张报表所对应的tab标签,包括样式及点击时要做的动作。其中选中的当前页的样式(css类)是:class=rq_curr。
然后,我们根据这段生成的代码来修改样式及点击动作,修改后的代码如下(代码说明见代码注释信息):
<SCRIPT LANGUAGE=”JavaScript”>
//全局变量oldNode,用于记录当前tab页的前一页id,默认状态下tab_item1为选中状态,因此初值赋为tab_item1
var oldNode = “tab_item1″;
//点击tab标签时的动作click1,这里要接受一个参数,该参数是点击的当前tab页的id,比如说有tab1切换点击到tab2,此时接收到得id便是tab_item2
function click1(nodeDesc) {
//alert(nodeDesc);
//将接收到得id赋值给newNode记录
var newNode = nodeDesc;
/* 这里要进行判断,如果说获取的新tab的id跟保存在全局变量中的旧的tab的id相同,不会做任何动作。否则:改变当前tab的样式及前一tab的样式,当前tab页采用myhover样式,而前一tab采用mynormal样式,区别可以在例子中明显看出。并且最重要的动作是将新获取到的tab的id保存到全局变量oldNode中。*/
if(newNode!=oldNode){
document.getElementById( newNode ).childNodes.item(0).childNodes.item(0).className=”myhover”;
document.getElementById( oldNode ).childNodes.item(0).childNodes.item(0).className=”mynormal”;
document.getElementById( newNode ).childNodes.item(0).style.background=”#C6C0CB”;
document.getElementById( oldNode ).childNodes.item(0).style.background=”#ddd”;
oldNode = newNode;
}
}
//tab栏样式(更改的是标签栏所在div的样式)
document.getElementById( “rq_tabs” ).parentNode.parentNode.parentNode.width=”30%”;
document.getElementById( “rq_tabs” ).parentNode.style.background=”#BDD9D2″;
//现在的实现方式需手动加入标签页//tab1样式
//document.getElementById( “rq_tabs” ).style.background=”#ddd”;
//赋予tab_item1新的名称及动作
document.getElementById( “tab_item1″ ).innerHTML=”<a id=’a_item1′ href=” ><span id=’span_item1′ onclick=’click1(this.parentNode.parentNode.id);return false;’>tab1 contents</span></a>”;
document.getElementById( “tab_item1″ ).childNodes.item(0).childNodes.item(0).className=”myhover”;
document.getElementById( “tab_item1″ ).childNodes.item(0).style.background=”#C6C0CB”
//tab2样式//赋予tab_item2新的名称及动作
document.getElementById( “tab_item2″ ).innerHTML=”<a id=’a_item1′ href=” ><span id=’span_item2′ onclick=’click1(this.parentNode.parentNode.id);return false;’> tab2 contents</span></a>”;
document.getElementById( “tab_item2″ ).childNodes.item(0).childNodes.item(0).className=”mynormal”;
document.getElementById( “tab_item2″ ).childNodes.item(0).style.background=”#ddd”
//tab3样式//赋予tab_item3新的名称及动作
document.getElementById( “tab_item3″ ).innerHTML=”<a id=’a_item1′ href=” ><span id=’span_item3′ onclick=’click1(this.parentNode.parentNode.id);return false;’> tab3 contents</span></a>”;
document.getElementById( “tab_item3″ ).childNodes.item(0).childNodes.item(0).className=”mynormal”;
document.getElementById( “tab_item3″ ).childNodes.item(0).style.background=”#ddd”;
//待增加的tab……
</SCRIPT>
这样,我们就实现了报表组tab样式的自定义,通过自定义样式的使用,使得报表系统更加的灵活多变,以符合不同的需求。