2013-01-03 47 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。再次感謝! –

相關問題