report services 問題總結(轉)

在新窗口打開鏈接
默認跳轉到Url是在當前窗口打開,如果要在新窗口打開,使用以下格式輸入:
="javascript:void(window.open('" & "url&para1=" & Fields!field1.Value & "','_blank'))"動態顯示嵌入圖片
首先拖一個圖像控件到位置,然後設置控件的Source屬性爲Embedded,然後設置Value表達式,不同情況使用不同的嵌入圖像名稱,形如:
=IIF (Fields!DelayEntityPercent.Value < 10, "prj_green", IIF(Fields!DelayEntityPercent.Value >= 10 And Fields!DelayEntityPercent.Value < 30, "prj_yellow", "prj_red"))圖片在單元格居中
設置Padding的Left到合適的大小 按記錄數分頁
爲表格創建組,並設置在結尾處分頁,分組表達式爲:Int((RowNumber(Nothing)-1)/10) ,其中10表示沒10條記錄分一頁 嵌入應用應用方案比較

嵌入方式

是否需要ReportServer

是否包含工具欄

是否包含參數輸入區域

部署

安全性

在何處生成報表

總評

iframe,設置src爲報表Url

是,依據報表設定,可顯示完整工具欄

是,依據報表設定決定顯示內容

Report Server和應用獨立部署

當前用戶需要有權限訪問報表

Report Server

基本完整利用Reporting Services各種功能,但需要處理權限問題,另外iframe高度設置不夠,會有滾動條

Iframe,設置src爲某個調用Reporting Service API動態生成html的地址

Report Server和應用獨立部署

可以模擬用戶訪問報表

Report Server

可解決權限問題,但是沒有了Reporting Services的很多優點,還增加了Render成本

調用API獲得HTML片段

Report Server和應用獨立部署

可以模擬用戶訪問報表

Report Server

基本同上,只是省掉了iframe

ReportViewer+ReportServer(遠程方式)

是,需要一個授權的副本

是,依據報表或Report Viewer設定,可顯示完整工具欄

是,依據報表或Report Viewer設定

Report Server和應用獨立部署,並且在應用的Web.config中添加Report Viewer配置

當前應用進程需要有權限訪問報表

Report Server

基本完整利用Reporting Services功能,但是需要解決權限問題並考慮授權副本的問題,通過實現一個接口來獲得報表訪問權限

RerportViewer+RDLC(本地方式)

是,但不完整,缺少一些導出格式及打印按鈕

部署應用及報表文件,並且在應用的Web.config中添加Report Viewer配置

由應用控制

當前應用

不能充分利用Reporting Services功能,應用服務器承擔了生成報表的計算

除以零錯誤號,因爲IIF和Switch等函數每個表達式都要計算,所以無法避免錯誤,因此使用自定義函數解決(調用時使用=Code.SafeDivide(a,b)):

Public Function SafeDivide(ByVal top, ByVal bottom) As Decimal
        If IsNothing(top) Or IsNothing(bottom) Then
            Return 0
        End If

        If bottom = 0 Or top = 0 Then
            Return 0
        End If

        Return top / bottom
    End Function

隱藏ReportViewer控件的一些導出格式
ReportViewer控件有很多導出格式,下面的代碼可以只保留導出Excel:
protected void reportViewer_PreRender(object sender, EventArgs e)
        {
            ReportViewer rw = sender as ReportViewer;
            if (rw == null)
            {
                return;
            }

            var renders = from r in rw.ServerReport.ListRenderingExtensions()
                          where string.Compare(r.Name, "Excel", true) != 0
                          select r;
            foreach (var r in renders)
            {
                HideRender(r);
            }
        }

        private static void HideRender(RenderingExtension re)
        {
            Type renderType = re.GetType();
            FieldInfo fieldInfo = renderType.GetField("m_serverExtension", BindingFlags.NonPublic | BindingFlags.Instance);
            object extension = fieldInfo.GetValue(re);
            Type extensionType = extension.GetType();
            PropertyInfo propertyInfo = extensionType.GetProperty("Visible");
            propertyInfo.SetValue(extension, false, null);
        }

在設計器裏預覽時,點擊“查看報表",有數據緩存時,點擊工具條的刷新按鈕可以達到目的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章