0

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

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

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

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

編集:さらに調査した結果、問題をさらに特定しました。DB 接続なしで 1 つのパラメーターだけで簡単なレポートを作成しました。次に、2 つのボタンとそのレポートに接続された ReportViewer コントロールを含む aspx ページを作成しました。1 つのボタンでパラメーターを非表示にし、1 つのボタンでパラメーターを表示します (前述のように SetParameters() 関数を使用)。この単純なシナリオでも、非表示/表示ボタンは開発環境では正常に機能しますが、本番環境でも同じ問題が発生します (表示ボタンが機能しません)。実稼働環境のネットワーク上の別のサーバーでもこれを試しましたが、同じ問題が発生しました。そのため、開発環境ではすべてが正常に機能しているように見えますが、その環境外の 2 つの異なるサーバーでは同じ問題が発生しているようです。

Edit2:以下は、テスト レポート ページのコード ビハインドです。このページには、ReportViewer、2 つのボタン、およびデバッグ出力用のラベルがあります。非表示のパラメーターの表示が機能しない場合、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
4

1 に答える 1

0

この問題が発生したことがある他の人のために、この問題が発生した理由を次に示します。

問題は環境の違いによるものでした。ReportViewer DLL をプロジェクトの bin フォルダーにコピーした (したがって、プロジェクトがホストされた場所にコピーした) 場合でも、params に関するこの問題は ReportViewer コントロールの古いバージョンのバグです。この問題を修正するには、Microsoft Report Viewer Redistributable 2005 SP1 を入手する必要があります。どうやら、この修正プログラムを開発環境にインストールしたようです。ただし、何らかの理由で、ReportViewer DLL は両側で同じバージョンでした。これは、実際には DLL が別の場所からアクセスされていたことが原因である可能性があります。

于 2009-05-27T05:27:49.460 に答える