2012年11月27日 星期二

[技巧] ReportViewer 超連結 Hyperlink 開啟本機檔案

Get Selected Value From ReportViewer via Hyperlink

CrystalReport 可直接在公式呼叫外部程式並傳入參數 或 直接開啟檔案 PDF WORD,etc...
formula = "C:\DAYLIGO\TEST\DayActivateFormWinApp.exe 21 " & LEFT(CSTR({RY010採購合同資料表.批號}),1)  & ""

ReportViewer 無法直接在公式呼叫外部程式 或 開啟檔案 PDF WORD,etc...
僅能超連結URL的網頁,所連結網頁會 GET/POST 接收參數!

或許 ReportViewer 有這樣的功能也說不定... 網路上也找的到相關的需求,但沒有解答!

解決方法:
    Private Sub ReportViewer1_Hyperlink(ByVal sender As System.Object, ByVal e As Microsoft.Reporting.WinForms.HyperlinkEventArgs) Handles ReportViewer1.Hyperlink
        '法一
        Dim aa As String = e.Hyperlink
        aa = aa.Replace("http://", "")
        aa = aa.Replace("/", " ")
        Shell("C:\Dayligo\TEST\DayActivateFormWinApp.exe " & aa, AppWinStyle.NormalFocus)
        'MsgBox(e.Hyperlink)
        e.Cancel = True

        '法二

        Dim bb As String = e.Hyperlink
        bb = bb.Replace("%20", " ")
        bb = bb.Replace("file:///", "")
        'MsgBox(e.Hyperlink)
        'MsgBox(bb)
        Shell(bb, AppWinStyle.NormalFocus)

        e.Cancel = True
    End Sub

'法一
在 report1.rdlc 將表格設定導覽,並指定到URL   ="http://19/" & Fields!sdid.Value
在 reporviewer1 運用 Hyperlink 事件,並取出 link 參數。
並在程式中解析~ 取出所要的參數。
19表示我要呼叫哪支程式(表單Form) 並傳入參數 sdid.Value

注意:
設定 enablehyperlinks = true
http:// <-- 這樣不會觸發連結事件
http://1/ <-- 這樣才會觸發連結事件



'法二
跳至URL:
="C:\Dayligo\TEST\DayActivateFormWinApp.exe 19 " & Fields!sdid.Value

開發工具:
VS2008
Framework3.5

參考:
如何获取ReportViewer呈现的报表中某单元格的值?
'Jump To' action with relative hyperlink
Hyperlink to a local file doesn't work
在ReportViewer中使用超链接(HyperLink)
啟動應用程式並且傳入參數

備註:
A組件下,某個視窗(水晶報表)
透過報表某欄位hyperlink開啟本地檔案DayActivateFormWinApp.exe (並且傳參數給本地檔案)
透過DayActivateFormWinApp.exe及接收的參數,再來呼叫A組件下的某支副程式
透過此支程式來呼叫B組件下,某個視窗(EX:個人資料檔案!!)
B組件依接到的參數顯示資料

沒有留言:

張貼留言