0

ASP.NET ReportViewerコントロールのユーザーに表示されるSSRSレポートがあります。レポートには多くのパラメータがあり、ReportViewerコントロールが提供するパラメータプロンプトを使用しています。レポートの特定のパラメータに応じて、残りのレポートパラメータのサブセットを求めるプロンプトが表示されます。ASP.NET ReportViewerコントロールでパラメータを表示/非表示にするときの問題

リンクされたレポートを使用して適切なパラメータを非表示にすることはできましたが、その最初のパラメータ(複数の値)にはさまざまな組み合わせがある可能性があります。代わりに、最初のパラメータを制御するASP.NET ListBoxがあり、その選択が変更されると、ReportViewer.ServerReport.SetParameters()関数を使用してパラメータを非表示にします(ReportParameterとReportParameterコンストラクタの配列を取ります)。パラメータを隠す/表示するにはブール値をとります)。

ここが問題です。私たちの開発環境ではすべてうまく動作します。レポートとASP.NETサイトを運用環境に展開すると、SetParameters()呼び出しが呼び出されたときにパラメータが表示されることはありません。私たちはデバッグ出力をいくつか入れているので、コードが呼ばれていることが分かります。パラメータを非表示にするコードは正常に動作しています。特定のパラメータが再び表示されるようにするコードは機能しません。パラメータプロンプトが表示されないだけでなく、パラメータのVisibleプロパティがtrue(ReportViewer.ServerReport.GetParameters()を使用してチェック)に設定されません。

両方の環境に同じバージョンのレポートビューアコントロール(Microsoft.ReportViewer.WebForms.dll)がインストールされています。何が間違っている可能性がありますか?回避策はありますか?ご質問がある場合は、コメントを残してください。

編集:さらなる調査の後、私たちはさらに問題を分離しました。私はDB接続なしでただ1つのパラメータで簡単なレポートを作った。次に、2つのボタンとそのレポートにリンクされたReportViewerコントロールを持つaspxページを作成しました。 1ボタンはパラメータを隠し、1ボタンはパラメータを示します(上記のようにSetParameters()関数を使用します)。このシンプルなシナリオでも、非表示/表示ボタンは開発環境で正常に動作しますが、プロダクション環境でも同じ問題が発生します(表示ボタンは機能しません)。本番環境ではネットワーク上の別のサーバーでもこれを試しましたが、同じ問題があります。開発環境ではすべてがうまくいくようですが、その環境外の2つのサーバーで同じ問題が発生しているようです。

Edit2:以下は、テストレポートページの背後にあるコードです。このページには、ReportViewer、2 Buttons、およびLabel for Debug出力があります。隠れたパラメータの表示がうまくいかないと、Labelは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

+0

テストASP.NETページのコードを使用して質問を編集しました。 –

答えて

0

ただ、今までにこの問題を持っている誰のために、ここで我々はこの問題を持った理由です。

問題は、環境の違いによるものでした。 ReportViewer DLLをプロジェクトのbinフォルダにコピーして(プロジェクトがホストされていた場所にコピーしていましたが)、この問題はReportViewerコントロールの古いバージョンのバグです。この問題を解決するには、Microsoft Report Viewer再頒布可能パッケージ2005 SP1を入手する必要があります。どうやら私たちはこの修正を開発環境にインストールしていました。何らかの理由で、ReportViewer DLLは両方とも同じバージョンでした。これは、DLLが実際に別の場所からアクセスされたためです。