0

我有一個向ASP.NET ReportViewer控件中的用戶顯示的SSRS報告。該報告有許多參數,我們正在使用ReportViewer控件提供的參數提示。根據報告的某個參數,我們只需要讓用戶提示其他報告參數的子集。嘗試在ASP.NET ReportViewer控件中顯示/隱藏參數時出現問題

我們可以使用鏈接報告並隱藏適當的參數,但第一個參數(它是多值的)有很多可能的組合,所以我們寧願不這樣做。相反,我們有一個控制第一個參數的ASP.NET列表框,當它的選擇被更改時,我們使用ReportViewer.ServerReport.SetParameters()函數來隱藏/顯示參數(它包含ReportParameter和ReportParameter構造函數的數組需要一個布爾值來隱藏/顯示參數)。

這是問題所在。在我們的開發環境中一切正常。當我們將報告和ASP.NET站點部署到生產環境時,調用這些SetParameters()調用時參數永遠不會顯示。我們知道代碼被調用,因爲我們放了一些調試輸出來確保。隱藏參數的代碼工作正常。只是導致某些參數再次出現的代碼不起作用。它不僅不會顯示參數提示,而且該參數的Visible屬性不會設置爲true(使用ReportViewer.ServerReport.GetParameters()進行檢查)。

我們在兩種環境和報告查看器控件(Microsoft.ReportViewer.WebForms.dll)的相同版本中安裝了SQL Server 2005 SP3。任何想法可能是錯的?任何解決方法的想法?如果您有問題,請留下評論。

編輯:經過進一步調查,我們進一步分析了這個問題。我用一個參數做了一個簡單的報告,沒有任何數據庫連接。然後,我製作了一個帶有2個按鈕的aspx頁面,並將ReportViewer控件連接到該報告。 1按鈕隱藏參數,1按鈕顯示參數(使用SetParameters()函數,如上所述)。即使在這種簡單的情況下,隱藏/顯示按鈕在開發環境中也能正常工作,但我們在生產環境中仍存在相同的問題(show按鈕不起作用)。我們也在生產環境中的網絡上的另一臺服務器上嘗試了這一點,並且我們遇到了同樣的問題。因此,在開發環境中,一切似乎都能正常工作,但在該環境之外的兩臺服務器上,我們似乎遇到了同樣的問題。

編輯2:下面是測試報告頁面的代碼。該頁面有一個ReportViewer,2個按鈕和一個用於調試輸出的標籤。當顯示隱藏參數不起作用時,標籤甚至顯示在調用ShowParameter之後,Visible屬性仍然是false。

Public Partial Class TestReportPage 
    Inherits System.Web.UI.Page 

    Public Sub HideParameter(ByVal parameterName As String) 
     Dim parameters As ReportParameterInfoCollection = ReportViewer1.ServerReport.GetParameters() 
     ReportViewer1.ServerReport.SetParameters(New ReportParameter() {New ReportParameter(parameterName, GetParameterDefaults(parameterName, parameters), False)}) 
     parameters = ReportViewer1.ServerReport.GetParameters() 
     lblTest.Text &= "Hide param " & parameterName & "; Is Visible: " & parameters(parameterName).Visible & "<br>" 
    End Sub 
    Public Sub ShowParameter(ByVal parameterName As String) 
     Dim parameters As ReportParameterInfoCollection = ReportViewer1.ServerReport.GetParameters() 
     ReportViewer1.ServerReport.SetParameters(New ReportParameter() {New ReportParameter(parameterName, GetParameterDefaults(parameterName, parameters), True)}) 
     parameters = ReportViewer1.ServerReport.GetParameters() 
     lblTest.Text &= "Show param " & parameterName & "; Is Visible: " & parameters(parameterName).Visible & "<br>" 
    End Sub 
    Public Shared Function GetParameterDefaults(ByVal parameterName As String, ByVal parameters As Microsoft.Reporting.WebForms.ReportParameterInfoCollection) As String() 
     Dim paramDefaults() As String = {} 
     Dim i As Int16 = 0 
     For Each paramValue As String In parameters(parameterName).Values 
      ReDim Preserve paramDefaults(i) 
      paramDefaults(i) = paramValue 
      i = i + 1 
     Next 
     Return paramDefaults 
    End Function 
    Protected Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     HideParameter("foo") 
    End Sub 
    Protected Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
     ShowParameter("foo") 
    End Sub 
End Class 
+0

您是否有一些示例代碼來說明如何從ASP.NET頁面設置參數?也許你的簡單測試。我遇到類似的問題,但問題原來是代碼而不是報告。 – Mozy 2009-05-21 20:04:24

回答

0

只是爲別人誰曾經有這個問題,這裏我們有這個問題的原因:

問題在環境的差異所致。即使我們將ReportViewer DLL複製到項目的bin文件夾中(並因此將其複製到託管項目的位置),但此問題(帶參數)是舊版ReportViewer控件中的一個錯誤。您需要獲取Microsoft Report Viewer Redistributable 2005 SP1才能解決此問題。顯然,我們在開發環境中安裝了此修復程序。由於某些原因,ReportViewer DLL在兩邊都是相同的版本。這可能是因爲DLL實際上是從其他位置訪問的。

相關問題