我正在使用ReportViewer与ServerReports,SSRS 2008 R2和VB.NET。我正在使用“转到报告”操作将报告链接在一起。单击SSRS报告上的链接时的默认功能是将该报告替换为钻取报告。相反,我希望将主报告保留在那里,并在其下方显示钻取报告作为单独的ReportViewer。
我有点找到了实现这个目标的方法,但它看起来效率不高。下面是我到目前为止的代码(从thread中找到):
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秒钟(钻取报告有点慢)。当我拿出上面的代码并且钻取报告替换了主报告时,只发送了一个帖子。
是否有办法拦截对钻取报告的第一次调用,并使用所需参数直接从ReportViewer3控件调用它?我错过了什么,这看起来是一个相当普遍的要求吗?