行。在汤姆发布他的之前,我找到了解决方案。他对 JQuery index() 函数的使用非常棒;我希望我事先知道这件事。另一方面,就像汤姆提到的那样,在分页的情况下, index() 将很难或不可能使用。接下来是The ROWID Column Method
,
我将把它分成 2 个答案,一个用于经典报告,一个用于 IR 报告。
以下是针对 CR 的。
1)添加一个rowid作为SQL查询的第一列,并将其别名设置为“”。在经典报表中,将列宽设置为 1,并在列格式下,在 CSS 样式中,放置display:none;
.
2a) 将以下隐藏项添加到您的页面:PX_CURRENT_ROW
, PX_CURRENT_COLUMN
。2b)如果您想要下一个和上一个按钮,并将以下按钮添加到您的页面:NEXT
, PREVIOUS
。
3)a 在页面设置中,在 JavaScript 下,在页面加载时执行,添加以下内容:
bind_validations(); //Tom will note whom I have learned my APEX/JQ tactics from :)
highlight();
3b) 在页面设置中,在 JavaScript 下,在函数和变量声明中,为三个函数添加以下代码:标识、突出显示和 bind_validations。我们将从绑定验证开始,它会在单击列链接时将列的 TD 发送到 identify_row 函数。我正在使用一个 PLSQL 函数为我的报告返回一个 SQL 查询,因此由 JQuery 标识的所有列标题都是通用的 COL0x。如果您使用常规查询,请在列标题中使用数组。
function bind_validations() {
var columnHeader = 'COL0';
for (var i = 2; i <10; i++) {
columnHeader = 'COL0' + i;
$("td[headers='" + columnHeader + "']").find('a').each(function(){
$(this).click(function(){
if ($(this).text.length != 0) { //necessary for next/previous buttons
identification(this);
window.location.href=this.href; //necessary for next/previous buttons
}
});
});
}
}
3b) 现在是识别功能。这会在页面加载之前暂时突出显示该行(延迟效果很好,因为它让用户知道该行将被激活),使用 $x_UpTill 对通过前一个函数中绑定的链接传递给函数的 TD 进行。
function identification(pThis) {
var currentColumn = $x_UpTill(pThis, 'TD');
var currentColumnHeader = $(currentColumn).attr('headers');
var currentRow = $x_UpTill(pThis,'TR');
var currentRownum = $(currentRow).find("td[headers='COL01']").text();
$x_RowHighlight(currentRow, 'pink');
//AJAX
/* As Tom mentions, AJAX is unnecessary: use f?p via column links instead.
In my particular situation, the idiosyncrasies render the passing of values
through f?p inappropriate. The purpose of passing the column header is for
the previous/next buttons, which will activate blank columns otherwise if
everyone of your columns has a link on it.
*/
var get = new htmldb_Get(null, &APP_ID., 'APPLICATION_PROCESS=dummy', &APP_PAGE_ID.);
get.add('PX_CURRENT_COLUMN' , currentColumnHeader);
get.add('PX_CURRENT_ROW', currentRownum);
gReturn = get.get();
get = null;
}
3)c 这里是高亮功能:
function highlight() {
var currentRownum = $v('PX_CURRENT_ROW')
$("tr").each(function() {
var rownum = $(this).find("td[headers='COL01']").text(); //Use ' ' if you don't have generic columns like I do
if (parseInt(rownum) == parseInt(currentRownum)) $x_RowHighlight(this, 'red');
});
}
4) 现在在下一个和上一个按钮上添加动态操作。对于 NEXT 按钮,执行动态操作:执行 JavaScript 代码,不要在页面加载时触发:
var currentRownum = $v('PX_CURRENT_ROW');
var currentColumnHeader = $v('PX_CURRENT_COLUMN');
$("tr").each(function() {
var nextRownum = $(this).find("td[headers='COL01']").text();
if (parseInt(nextRownum) == parseInt(currentRownum) + 1) { //use -1 for the previous button
$(this).find("td[headers='" + currentColHeader + "']").find('a').trigger('click');
}
});
对于上一个按钮,将条件更改为:`if (parseInt(nextRownum) == parseInt(currentRownum) - 1)