我将 ReportViewer 与 ServerReports、SSRS 2008 R2 和 VB.NET 一起使用。我正在使用“转到报告”操作将报告链接在一起。单击 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
这确实有效,但看起来好像它正在尝试加载报告两次。我无法找到有关 DrillthroughEventHandler 的太多文档,但是当钻取报告已从服务器获取并准备好与所有数据一起呈现时,该事件似乎会触发。
因此,调用我上面的代码实际上会按顺序加载报告两次(一次是在主报告中单击链接时,另一次是在设置钻取报告参数时)。在萤火虫中,我看到每个发布事件大约需要 8 秒(钻取报告有点慢)。当我取出上面的代码并且钻取报告替换主报告时,只发送了 1 个帖子。
有没有办法拦截对钻取报表的第一次调用,并使用所需的参数直接从 ReportViewer3 控件调用它?我错过了什么吗,这看起来是一个相当普遍的要求?