APEX 3.2上Interactive Report 的表头复制(1)(APEX4.1下运行通过)
来源:互联网 发布:淘宝助理属性不一致 编辑:程序博客网 时间:2024/05/16 15:36
最近为公司一个部门写了一个APEX应用。
他们要把Excle上的100多栏(太宽?)的表显示在APEX的Interactive Report上。
还不止这些,每页要显示的记录行数也要尽量多,250行(太长?)。
这样实现并不难,但有个问题,用户在看数据时,表头经常跑到画面外。身首异地,很不方便。
能像Excel那样,将画面分割表示当然好,可惜不能。于是就想出了复制表头信息,将其插入需要的地方这一笨招。
其实也简单,在需要的地方双击(DoubleClick),复制表头(下表中以红色示意的部分)。
按(x)可消去复制的表头;按(+)可将该行数据纵向显示,如果用IE,还可以拷贝到Clipboard。
Screenshot:
Javascript code:
// **************************************
// Name: f104_insertheader.js
// Created by Cho for APEX IR. 2011/11/20
// Added 1st line (Table Header) when double clicked.
// Tested OK under IE v7.0 and FF v8.0
//***************************************
/************ Put following line(s) in IR Region Header HTML ******************
<div ondblclick="insertHeader2Click(event)" onclick="moveTo(event);">
*******************************************************************************/
/************ Put following line(s) in IR Region Footer HTML/Script ************
</div>
<!-- Scroll Box Definition, Begin -->
<div id="scrollBox" style="position:absolute; background-color:lightBlue;border-width:5px; border-style:outset; visibility:hidden;">
<div id="scrollBoxContents" style="width:200px; height:300px; overflow:auto;">
</div> <!--end of scrollBoxContents-->
<div name="submenu" style="text-align:center; background-color:darkgray; color:white; cursor: hand;cursor:pointer; white-space:nowrap;">
<span onmouseover="copy2Clipboard(boxContents.innerHTML);">
[Copy to Clipboard]</span>
<span onmouseover="boxVisibility('hidden');" >
[Close x ]</span>
</div>
<div id="boxMessage" onmouseover="javascript:this.style.visibility='hidden';" style="position:absolute; top:250px; left:30px; visibility:hidden; white-space:nowrap; background-color:darkgray; color:white; border-style:groove;"> [x] copy finished.</div>
</div> <!--end of scrollBox-->
<!-- Scroll Box Definition, End -->
<script type="text/javascript">
// 2011/11/17... Working version. by Cho. InsertHeader via double click.
var box = document.getElementById('scrollBox');
var boxContents = document.getElementById('scrollBoxContents');
var lineClickedB4 = 0; // remember which line is clicked before
//-->
</script>
*******************************************************************************/
function copy2Clipboard(s){
if( window.clipboardData && clipboardData.setData ){
var tmpS = s.replace(/\r?\n/g,'');
tmpS = tmpS.replace(/<\/td>/gi,'\t').replace(/<\/tr>/gi,'\r\n');
tmpS = tmpS.replace(/<.*?>/gi,'');
clipboardData.setData("Text", tmpS);
//alert('Copied to your clipboard. Please check.');
$x('boxMessage').innerHTML = '[x] Copy finished.';
}
else{
//alert('Sorry, this browser does not support "copy to clipboard".');
$x('boxMessage').innerHTML = '[x] Sorry, browser not supported function.';
}
$x('boxMessage').style.visibility='visible';
}
function moveTo(e) {
//var scrollBox = document.getElementById('scrollBox');
if(box.style.visibility == 'visible'){
//alert(docX(e)); alert(docY(e));
//box.style.top = docY(e);
//box.style.left = docX(e);
box.style.top = docY(e) + "px"; //20120911, modified for firefox
box.style.left = docX(e) + "px"; //20120911, modified for firefox
}
}
function boxVisibility(flg) {
//flg = visible || hidden
//alert(flg);
//var scrollBox = document.getElementById('scrollBox');
box.style.visibility = flg;
$x('boxMessage').style.visibility='hidden'; //hide [copy to clipboard] message box if visible
}
// functions to get (x,y) in a documnet. Work both IE & FF.
function docX(e) {return e.pageX || e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;}
function docY(e) {return e.pageY || e.clientY + document.body.scrollTop + document.documentElement.scrollTop ;}
function plusClicked(e){
var tgt;
if (document.all){tgt = e.srcElement;} //for IE
else{tgt = e.target;} //for FireFox
var lineClicked = tgt.parentNode.parentNode.rowIndex+1;
//alert(lineClicked+'<---'+lineClickedB4)
if (lineClickedB4 != lineClicked){
lineClickedB4 = lineClicked;
var table = document.getElementById(gTable);
makeScrollBox(table, 0, lineClicked);
}
boxVisibility('visible');
// moveTo(event);
moveTo(e); //20120911, modified for firefox
}
function insertHeader2Click(e){
var tgt;
if (document.all){tgt = e.srcElement;} //for IE
else{tgt = e.target;} //for FireFox
var lineClicked = tgt.parentNode.rowIndex;
var table = document.getElementById(gTable);
if (lineClicked>0){
boxVisibility('hidden'); //hide scrollBox when make newHeader
lineClickedB4 = 0; //reset to 0 to prevent confuse.
newHeader(table, 0, lineClicked);
}
}
function makeScrollBox(table, hdLine, bdLine){
if (hdLine<0){hdLine=0;}
if (bdLine<=0){return;} // if bdLine<=0, it's not a table line, so exit(return).
//var tbody = table.tBodies[0]; // Use tbody
var header = table.getElementsByTagName('tr')[hdLine];
var contnt = table.getElementsByTagName('tr')[bdLine];
var hdCols = header.getElementsByTagName('th');
var ctCols = contnt.getElementsByTagName('td');
boxContents.innerHTML = ''; // initialize contents block(<div>).
// get the reference for the body
//var body = document.getElementsByTagName("body")[0];
// creates a <table> element and a <tbody> element
var tbl = document.createElement("table");
var tblBody = document.createElement("tbody");
// creating all cells
//for (var j = 0; j < 2; j++) {
// creates a table row
//var row = document.createElement("tr");
for (var i = 0; i<hdCols.length; i++) {
var row = document.createElement("tr");
// Create a <td> element and a text node, make the text
// node the contents of the <td>, and put the <td> at
// the end of the table row
var cell = document.createElement("td");
var cellText = document.createTextNode(hdCols[i].innerHTML.replace(/<.*?>/gi,'').replace(/&.*?;/,''));
cell.appendChild(cellText);
row.appendChild(cell);
var cell = document.createElement("td");
var cellText = document.createTextNode(ctCols[i].innerHTML.replace(/<.*?>/gi,'').replace(/&.*?;/,''));
cell.appendChild(cellText);
row.appendChild(cell);
tblBody.appendChild(row);
}
// add the row to the end of the table body
//tblBody.appendChild(row);
//}
// put the <tbody> in the <table>
tbl.appendChild(tblBody);
// appends <table> into <body>
//body.appendChild(tbl);
boxContents.appendChild(tbl);
// sets the border attribute of tbl to 2;
tbl.setAttribute("border","1px");
}
function newHeader(table, from, to){
//alert(from+'-->'+to);
if (to<0){to=0;}
if (from<0){from=0;}
var tbody = table.tBodies[0]; // Use tbody
//var trFrom = tbody.rows[from]; // Make sure row stays referenced
//tbody.removeChild(trFrom); // Remove the row before inserting it (dupliate id's
var trTo = tbody.rows[to];
//var trClone = tbody.rows[from].cloneNode(true); // copy children too
//trClone = newHeader();
//tbody.insertBefore(trClone, trTo);
//alert(trClone.innerHTML);
//var table = document.getElementById(gTable);
var header = table.getElementsByTagName('tr')[0];
var cols = header.getElementsByTagName('th');
//alert(header.innerHTML);
var newHeader = document.createElement('tr'); // create row node
for (i=0;i<cols.length;i++){
//alert(cols[i].getElementsByTagName('div')[0].id);
col = document.createElement('th'); // create column node
//alert (cols[i].innerHTML);
switch (i){
case 0:
col.innerHTML = cols[i].innerHTML; // Edit link column
break;
default:
if (to==1){col.innerHTML='';}
else{col.innerHTML = cols[i].innerHTML.replace(/onclick=.*?>/gi,'onclick=goHome(event);gReport.controls.widget(this.id)>');}
col.innerHTML = col.innerHTML + '<span title="Remove Header" style="cursor: hand;cursor: pointer;" onclick=removeHeader(this)>x</span>';
col.innerHTML = col.innerHTML + ' ';
col.innerHTML = col.innerHTML + '<span title="Show Detail" style="cursor:hand; cursor:pointer; font-size:small;" onclick="plusClicked(event)">+</span>';
break;
}
newHeader.appendChild(col); // append a column to row
}
tbody.insertBefore(newHeader, trTo); // insert newHeader before trTo
return newHeader;
}
function removeHeader(tgtObj){
//alert(tgtObj.parentNode.parentNode.tagName);
var lineClicked = tgtObj.parentNode.parentNode.rowIndex;
if (lineClicked>0){
var table = document.getElementById(gTable);
table.deleteRow(lineClicked);
}
}
function goHome(e){
//alert('Going Home....');
//window.scrollTo(0, 0); // scroll to position(x,y)
//alert(docY(e));
window.scrollBy(0,-e.pageY||-99999999); // horizontal and vertical scroll increments. SLOW in IE....
//window.scrollBy(0,-9999999999);
}
- APEX 3.2上Interactive Report 的表头复制(1)(APEX4.1下运行通过)
- APEX 3.2上Interactive Report 的表头复制(2)(APEX设计画面截图)
- Oracle Apex 实用笔记系列 6 - 可编辑交互报告 Editable Interactive Report
- CSDN Summer of Code 2014 Report #1: About a interactive Command Line App
- Dotnet环境下的crystal report的部署(上)
- 车轮再造(1):在APEX上使用Ajax一例:Update Table,旨在突破100Item/Form的限制
- IMAP, Interactive Mail Access Protocol (1)
- Oracle Apex 实用笔记系列 1 - Oracle Apex 调试技巧
- APEX升级到4.1.1后遇到的几个问题
- Oracle APEX Report的某一个列根据条件显示不同的颜色
- Oracle APEX Classical Report的列根据条件判断显示为Link
- apex中无法通过外部sql调用数据库过程(apex安全机制)
- 解决Salesforce上的Batch限制问题(salesforce Apex Batch Governor)
- Oracle APEX Report根据列排序
- android:listview显示table效果,并有固定不动的表头(手把手教你,详细)不重写listview类,可复制到eclipse中进行运行
- APEX上自制菜单
- 通过ObjectARX的运行时来复制实体
- PEBrowse Professional Interactive 7.30.1
- scrollview 内容重用小demo(懒人专用哈)
- Mastering Regular Expression 代码介绍 2 - HTML 格式转换
- Quartz Core 图层编程
- 我要开始写C#和JAVA自学日记了
- Javascript在页面加载时的执行顺序
- APEX 3.2上Interactive Report 的表头复制(1)(APEX4.1下运行通过)
- javaScript对象
- wse 2.0 错误代码1001 解决方法
- (转)C#中浮点数依IEEE-754标准转二进制串
- iphone编程dispatch的使用
- Oracle 备份 与 恢复 概述
- 张尧学讲座(中南大学校长讲座)-------用户控制的云计算----透明云计算
- [Cocoa]深入浅出 Cocoa 之 Core Data(4)- 使用绑定
- PHP 日期转换为时间戳 strtotime 与 mktime 函数