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
ASP.NETページからパラメータを設定する方法のサンプルコードがありますか?多分あなたの簡単なテスト。私は同様の問題に遭遇しましたが、問題はレポートではなくコードであることが判明しました。 – Mozy
テストASP.NETページのコードを使用して質問を編集しました。 –