2013-01-03 20 views
1

我有两个通过PL/SQL返回函数动态创建的经典报表。每个报告的数据通常包含相同的数据,但其列名通常是不同的。如何在Oracle Apex中动态设置列宽

我希望它们垂直对齐,但列名称的差异会使列宽不同。我的目标是将每列宽度设置为第一个或第二个报告列的较大值,即每列。我想我会找到每个列长度中的较大值以及一个设置像素量的倍数。

但是,我将如何动态设置列宽,首先要动态生成报告?

回答

1

您可以使用内置于APEX中的jQuery库,通过一些Javascript来做到这一点。

(警告:我的JavaScript是不是世界上最优雅的)

这为我工作:

1)在该页面的“函数和全局变量声明”属性创建此功能:

function setColWidths(colId) { 
    var maxWidth = 0; 
    $('th#'+colId).each (function (index) { 
     w = $(this).width(); 
     maxWidth = Math.max(maxWidth,w); 
     }); 
    $('th#'+colId).each (function (index) { 
     $(this).width(maxWidth); 
     }); 
} 

2)在“执行时页负载”页面的属性调用每列的函数:

setColWidths('COL01'); 
setColWidths('COL02'); 
setColWidths('COL03'); 

您或许可以增强此解决方案,以便您不必为每个列显式调用该函数。

+0

太棒了!谢谢@TonyAndrews。快速提问:我的网页实际上有三份报告,一份主要的投资者关系报告,以及我在这个问题中询问的两份经典报告。这两个经典报告位于顶部,或者排在第一位,主要的投资者关系报告会在稍后发布。为什么此代码不考虑IR报告?我想知道你的代码是否会把所有东西搞砸,因为IR报告中的列名要长得多,但没有,它完美地工作。我甚至在函数中添加了另一个$('th#'+ colId).each ...也看看它是否会产生影响,但它没有。 -Matthew Moisen –

+1

IR的列别名可能不是COL01,COL02等。我刚创建了一个带有列别名COL01,COL02的IR,它工作正常。 –

+0

你是对的,我的IR是从一个集合动态创建并生成COL01 ..列,但我忘记了我也有动态生成的报表属性,因此没有TH#colId。再次感谢! –

相关问题