如何透過報表單元格右鍵控制報表跳轉到不同連結地址
需求說明:
潤乾報表的單元格中支援超連結屬性,使用者可以透過設定該屬性,實現在瀏覽器端用滑鼠點選某個單元格跳轉到指定頁面,並且還能夠傳遞所需要的引數,從而實現資料的鑽取(詳見 )。不過這種超連結的設定方式只能跳轉到單一的指定頁面,在一些特殊的業務要求中,使用者可能需要基於一個單元格檢視不同的明細資訊。比如,使用者在訪問一個地區列表時,既想經由該頁面檢視某地區的銷售收入情況,又想檢視該地區的其他資訊。這樣,在原有方式下就需要增加多個超連結按鈕,每個按鈕設定不同的超連結,而這種做法不一定能符合使用者的頁面樣式需要或者操作習慣。下面,透過一個實際例子來介紹一下,如何在頁面中增加右鍵操作,點選右鍵時先彈出可鑽取的列表,選擇後跳轉到不同的頁面。
一:設定報表格式
按照實際需求,開發報表模板,如下圖:
報表格式比較簡單,是一個比較普通的分組報表,A2 單元格按照國家進行分組,B2 單元格按照省份進行分組,C2 單元格顯示出對應的城市名稱,報表展現結果如下:
現在要求,在城市列增加右鍵操作,右鍵時彈出地址選擇列表。
報表單元格有個屬性為 HTML 事件屬性,可以在該屬性中設定 html 觸發事件,如在 C2 單元格的 HTML 事件屬性表示式中寫入:“popMenu 函式,並將 C2 單元格的值傳入進行,這樣報表中設定了 C2 單元格的右鍵操作,只需要在顯示報表的 jsp 中實現 popMenu 這個 js 函式以及相關操作即可。
二:頁面 javascript 設定
在顯示報表的 jsp 的 javascript 中實現相應操作,首先,因為頁面中要右鍵操作,所以要先遮蔽掉瀏覽器本身的右鍵,在 js 中加入如下程式碼:
function disClick(){ return false; } document.oncontextmenu=disClick; 接下來的話就是要實現報表中指定的右鍵操作,整體的js程式碼如下: <SCRIPT> function disClick(){ return false; } document.oncontextmenu=disClick; var strMenu = "<div id=\\"menu\\" class=\\"clsMenu\\" onMouseover=\\"highlight()\\" onMouseout=\\"lowlight()\\">" strMenu += "</div>" // 判斷客戶端瀏覽器 function showmenu(){ var rightedge=document.body.clientWidth-event.clientX var bottomedge=document.body.clientHeight-event.clientY if (rightedge<menu.offsetWidth) menu.style.left=document.body.scrollLeft+event.clientX-menu.offsetWidth else menu.style.left=document.body.scrollLeft+event.clientX if (bottomedge<menu.offsetHeight) menu.style.top=document.body.scrollTop+event.clientY-menu.offsetHeight else menu.style.top=document.body.scrollTop+event.clientY menu.style.visibility="visible" return false } function sysMenu(){ return false } // 隱藏選單 function hidemenu(){ menu.style.visibility="hidden" } // 選單項獲得焦點時加亮顯示 function highlight(){ if (event.srcElement.className=="menuitems"){ event.srcElement.style.backgroundColor="highlight" event.srcElement.style.color="highlighttext" } } // 選單項失去焦點 function lowlight(){ if (event.srcElement.className=="menuitems"){ event.srcElement.style.backgroundColor="" event.srcElement.style.color="menutext" } } function openNewWindow(winhref,winstyle){ var objNewWindow = window.open(winhref,"",winstyle); objNewWindow.focus(); } document.write(strMenu); function popMenu(cb) { var SubstrMenu = "<div class=\\"menuitems\\" onClick=\\"window.open(')\\">查“"+cb+"”的所有客戶(百度)</div>"; SubstrMenu += "<div class=\\"menuitems\\" onClick=\\"window.open(')\\">查“"+cb+"”的重點客戶(百度)</a></div>"; SubstrMenu += "<hr>"; SubstrMenu += "<div class=\\"menuitems\\" onClick='hidemenu()'>隱藏此選單</a></div>"; menu.innerHTML = SubstrMenu; showmenu(); return false; } </SCRIPT> 另外,為了更好的顯示效果,還可以增加css樣式來進行控制,將如下樣式同樣加入到jsp頁面中: ```java <STYLE>.clsMenu { BORDER-RIGHT: buttonhighlight 2px outset; BORDER-TOP: buttonhighlight 2px outset; VISIBILITY: hidden; BORDER-LEFT: buttonhighlight 2px outset; WIDTH: 200px; CURSOR: default; COLOR: menutext; BORDER-BOTTOM: buttonhighlight 2px outset; POSITION: absolute; BACKGROUND-COLOR: menu } .menuitems { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 12px; COLOR: #000000; LINE-HEIGHT: 18px } </STYLE>function disClick(){ return false; } document.oncontextmenu=disClick; 接下來的話就是要實現報表中指定的右鍵操作,整體的js程式碼如下: <SCRIPT>function disClick(){ return false; } document.oncontextmenu=disClick; var strMenu = "<div id=\\"menu\\" class=\\"clsMenu\\" onMouseover=\\"highlight()\\" onMouseout=\\"lowlight()\\">"strMenu += "</div>"// 判斷客戶端瀏覽器function showmenu(){ var rightedge=document.body.clientWidth-event.clientX var bottomedge=document.body.clientHeight-event.clientY if (rightedge<menu.offsetWidth) menu.style.left=document.body.scrollLeft+event.clientX-menu.offsetWidth else menu.style.left=document.body.scrollLeft+event.clientX if (bottomedge<menu.offsetHeight) menu.style.top=document.body.scrollTop+event.clientY-menu.offsetHeight else menu.style.top=document.body.scrollTop+event.clientY menu.style.visibility="visible" return false}function sysMenu(){ return false}// 隱藏選單function hidemenu(){ menu.style.visibility="hidden"}// 選單項獲得焦點時加亮顯示function highlight(){ if (event.srcElement.className=="menuitems"){ event.srcElement.style.backgroundColor="highlight" event.srcElement.style.color="highlighttext"} }// 選單項失去焦點function lowlight(){ if (event.srcElement.className=="menuitems"){ event.srcElement.style.backgroundColor="" event.srcElement.style.color="menutext"} }function openNewWindow(winhref,winstyle){ var objNewWindow = window.open(winhref,"",winstyle); objNewWindow.focus(); } document.write(strMenu); function popMenu(cb) { var SubstrMenu = "<div class=\\"menuitems\\" onClick=\\"window.open(')\\">查“"+cb+"”的所有客戶(百度)</div>"; SubstrMenu += "<div class=\\"menuitems\\" onClick=\\"window.open(')\\">查“"+cb+"”的重點客戶(百度)</a></div>"; SubstrMenu += "<hr>"; SubstrMenu += "<div class=\\"menuitems\\" onClick='hidemenu()'>隱藏此選單</a></div>"; menu.innerHTML = SubstrMenu; showmenu(); return false; } </SCRIPT> 另外,為了更好的顯示效果,還可以增加css樣式來進行控制,將如下樣式同樣加入到jsp頁面中: ```java <STYLE>.clsMenu { BORDER-RIGHT: buttonhighlight 2px outset; BORDER-TOP: buttonhighlight 2px outset; VISIBILITY: hidden; BORDER-LEFT: buttonhighlight 2px outset; WIDTH: 200px; CURSOR: default; COLOR: menutext; BORDER-BOTTOM: buttonhighlight 2px outset; POSITION: absolute; BACKGROUND-COLOR: menu } .menuitems { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 12px; COLOR: #000000; LINE-HEIGHT: 18px } </STYLE>
這樣,在瀏覽器端就能夠實現在單元格上滑鼠右鍵跳轉到不同的連結地址:
注:本例連結地址設定到了百度,實際中跳轉可以自行根據實際需求在 js 中進行設定。
總結:
本例中透過報表的 HTML 事件屬性實現了單元格的右鍵跳轉到不同的連結地址,報表中除了右鍵屬性外,還支援其他的一些觸發事件操作,具體可以參考報表幫助文件:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957599/viewspace-2669214/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 報表如何透過引數控制資料許可權
- FastReport 如何透過程式碼建立報告表單AST
- 玩轉報表超連結
- 如何透過前端表格控制元件實現自動化報表?前端控制元件
- 報表也可以根據單元格計算後結果進行排序排序
- 各位推薦一下,哪種報表可以實現凍結表頭合併單元格,謝謝!
- 超連結鑽取之圖表鑽取、單元格資料鑽取
- 普通填報表單元格實現資料二次篩選
- EBS 單個報表(非報表集)根據報表名稱獲取報表源程式
- 分欄報表-物品清單報表實現
- dedecms自定義表單提交成功後提示資訊修改和跳轉連結修改
- 透過Amoeba連線mysql報錯MySql
- FastReport報表控制元件使用技巧總結AST控制元件
- ActiveReports 報表應用教程 (2)---清單類報表
- 報表連 MongoDB,資料量大報表慢,怎麼做分頁?MongoDB
- 遠端控制篇:透過機器名得到IP地址 透過IP地址得到機器名 (轉)
- 透過shell指令碼生成資料統計資訊的報表指令碼
- 網頁報表研究 (轉)網頁
- NC502報表學習總結(未含合併報表)
- 「小碼短連結」好用、好看、有統計報表的短連結工具
- 水晶報表官方例項下載:報表和應用程式 (轉)
- 【C#】【DevExpress】自定義單元格右鍵選單,去除單元格編輯時,載入系統的預設選單C#devExpress
- 什麼是大報表?如何解決大報表的問題?
- 遠端控制篇:透過IP地址得到機器名 (轉)
- ActiveReports 報表應用教程 (3)---圖表報表
- iReport 報表、子報表、主從報表、合計、例項解析
- ActiveReports 報表應用教程 (7)---交叉報表及資料透檢視實現方案
- Crystal Report(水晶報表)的報表封裝成VB的DLL (轉)封裝
- 通過外來鍵連線多個表
- 如何分析報表效能問題
- ActiveReports 報表應用教程 (8)---互動式報表之動態過濾
- 資料結構——單鍵表操作集資料結構
- 手動新增git到 右鍵選單Git
- 為Excel工作表單元格命名的兩種方法Excel
- 中國式複雜報表真的有必要存在?如何解決複雜報表
- SQLServer通過連結伺服器查詢表報錯 “訊息 7313,級別 16”SQLServer伺服器
- 複雜報表設計之動態報表
- 各人部落格園地址連結