ServerReports、SSRS 2008 R2、および VB.NET で ReportViewer を使用しています。「レポートに移動」アクションを使用してレポートをリンクしています。SSRS レポートのリンクをクリックしたときの既定の機能は、そのレポートをドリルスルー レポートに置き換えることです。代わりに、メイン レポートをそこに保持し、ドリルスルー レポートをその下に別の ReportViewer として表示したいと考えています。
これを達成する方法をいくらか見つけましたが、あまり効率的ではないようです。以下は私がこれまでに持っているコードです(このスレッドから見つかりました):
Public Sub SummaryDrillthroughHandler(ByVal sender As Object, _
ByVal e As DrillthroughEventArgs)
e.Cancel = True 'Stop action from replacing main report as expected
Dim rpic As ReportParameterInfoCollection = e.Report.GetParameters()
Dim params As New List(Of ReportParameter)
For Each param As ReportParameterInfo In rpic
params.Add(New ReportParameter(param.Name, param.Values(0)))
Next
ReportViewer3.ServerReport.ReportServerUrl = New Uri("myReportServer")
ReportViewer3.ServerReport.ReportPath = e.ReportPath
ReportViewer3.ServerReport.SetParameters(params)
End Sub
これは機能しますが、レポートを 2 回読み込もうとしているように見えます。DrillthroughEventHandler に関する多くのドキュメントを見つけることができませんでしたが、ドリルスルー レポートがサーバーから既にフェッチされ、すべてのデータでレンダリングする準備ができているときに、イベントが発生するようです。
したがって、上記のコードを呼び出すと、基本的にレポートが 2 回連続して読み込まれます (1 回目はメイン レポートでリンクがクリックされたとき、2 回目はドリルスルー レポートのパラメーターが設定されたとき)。firebug を見ると、各投稿イベントにそれぞれ約 8 秒かかっていることがわかります (ドリルスルー レポートは少し遅いです)。上記のコードを取り出し、ドリルスルー レポートがメイン レポートを置き換えると、投稿が 1 つだけ送信されます。
ドリルスルー レポートに対する最初の呼び出しをインターセプトし、必要なパラメーターを使用して ReportViewer3 コントロールから直接呼び出す方法はありますか? 何か不足していますか?これはかなり一般的な要件のように見えますか?