热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

APEX3.2上InteractiveReport的表头复制(1)(APEX4.1下运行通

最近为公司一个部门写了一个APEX应用。他们要把Excle上的100多栏(太宽?)的表显示在APEX的InteractiveReport上。还不止这些,每页要显示的记录行数也要尽量多,250行(太长?)。这样实现并不难,但有个问题,用户在看数据时,表头经常跑到画面外。身

最近为公司一个部门写了一个APEX应用。 他们要把Excle上的100多栏(太宽?)的表显示在APEX的Interactive Report上。 还不止这些,每页要显示的记录行数也要尽量多,250行(太长?)。 这样实现并不难,但有个问题,用户在看数据时,表头经常跑到画面外。身

最近为公司一个部门写了一个APEX应用。

他们要把Excle上的100多栏(太宽?)的表显示在APEX的Interactive Report上。

还不止这些,每页要显示的记录行数也要尽量多,250行(太长?)。

这样实现并不难,但有个问题,用户在看数据时,表头经常跑到画面外。身首异地,很不方便。

能像Excel那样,将画面分割表示当然好,可惜不能。于是就想出了复制表头信息,将其插入需要的地方这一笨招。

其实也简单,在需要的地方双击(DoubleClick),复制表头(下表中以红色示意的部分)。

按(x)可消去复制的表头;按(+)可将该行数据纵向显示,如果用IE,还可以拷贝到Clipboard。

ABC DEF GHI JKL ..... ... ... XYZ ... ...
123 456 789 012 .... ... ... 999 ... ...
... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...
(双 击插 头)
ABC DEF GHI JKL ... ... ... XYX ... ...
987 123 445 768 .. ... .. 765 ... ...
... ... ... ... ... ... ... ... ... ...

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 ******************

*******************************************************************************/

/************ Put following line(s) in IR Region Footer HTML/Script ************





[Copy to Clipboard]

      

[Close x ]




*******************************************************************************/


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) &#43; "px"; //20120911, modified for firefox

box.style.left = docX(e) &#43; "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 &#43; document.body.scrollLeft &#43; document.documentElement.scrollLeft;}
function docY(e) {return e.pageY || e.clientY &#43; document.body.scrollTop &#43; 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&#43;1;
//alert(lineClicked&#43;'<---'&#43;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(

).

// get the reference for the body
//var body = document.getElementsByTagName("body")[0];

// creates a

element and a element
var tbl = document.createElement("table");
var tblBody = document.createElement("tbody");

// creating all cells
//for (var j = 0; j <2; j&#43;&#43;) {
// creates a table row
//var row = document.createElement("tr");

for (var i = 0; i var row = document.createElement("tr");
// Create a

in the
element and a text node, make the text
// node the contents of the
, and put the 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


tbl.appendChild(tblBody);
// appends
into
//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&#43;'-->'&#43;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 //alert(cols[i].getElementsByTagName('p')[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 &#43; 'x';
col.innerHTML = col.innerHTML &#43; '     ';
col.innerHTML = col.innerHTML &#43; '&#43;';

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);
}

推荐阅读
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • 近期尝试从www.hub.sciverse.com网站通过编程手段获取数据时遇到问题,起初尝试使用WebBrowser控件进行数据抓取,但发现使用GET方法翻页时,返回的HTML代码始终相同。进一步探究后了解到,该网站的数据是通过Ajax异步加载的,可通过HTTP查看详细的JSON响应。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 为了优化用户体验,本文探讨了如何调整下拉菜单的宽度。通过合理设置宽度,可以提升界面的美观性和易用性。文章提供了具体的代码示例,帮助开发者实现这一目标。例如,可以通过 CSS 或 JavaScript 来动态调整下拉菜单的宽度,确保其在不同设备和屏幕尺寸上都能保持良好的显示效果。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 本文探讨了如何通过检测浏览器类型来动态加载特定的npm包,从而优化前端性能。具体而言,仅在用户使用Edge浏览器时加载相关包,以提升页面加载速度和整体用户体验。此外,文章还介绍了实现这一目标的技术细节和最佳实践,包括使用User-Agent字符串进行浏览器识别、条件加载策略以及性能监控方法。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • Win10 S系统与Chrome浏览器兼容性问题分析
    2017年5月2日,微软在美国推出了最新的Windows 10 S操作系统,专为教育领域设计,旨在为教师和学生提供一系列高效的产品和服务。该系统的最大特点是其简洁的设计和快速的响应速度,然而在与某些应用的兼容性方面,特别是Chrome浏览器,仍存在一些问题。本文将深入分析这些兼容性问题,并探讨可能的解决方案。 ... [详细]
author-avatar
Matherslll_493
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有