我一直在通过报表服务器远程运行报表的webforms应用程序中试验ReportViewer控件。感觉ReportViewer中的Parameter接口是限制性的。我认为另一种方法是创建我自己的Web表单控件,它将参数传递给ReportViewer并绕过默认参数界面。我对SSRS的经验非常少,我想知道这是否是一个可行的解决方案,还是要求麻烦。 (即新报告可能导致必须创建新的UI)。我想我的问题是报表查看器中的标准用户界面是否适用于企业级应用程序。我不是在谈论分页控件,更多是关于下拉列表和复选框列表。
答案 0 :(得分:3)
如果您的报告通常使用简单的参数集,则默认界面可以正常工作(特别是如果您的用户更精明)。但是更大,更复杂的参数集在默认界面中很快就会变得无法容忍(如果你不希望你的用户如此精明,这可能是一个更大的问题。)
我遇到了大量报告的类似问题。有些可以非常简单(I.E.,没有参数或简单的日期范围),有些可能非常简单(25+参数)。
我们达成的解决方案是编写一个ASP.NET报表菜单应用程序,该应用程序从SSRS中检索大多数报表的参数并将其动态呈现给用户。有些报告太复杂了,所以我们进一步为他们编写了WebUserControls,这进一步简化了用户的参数。这样,大多数报告都不需要额外的干预,对于那些做过的人,我们有了轻松创建包装器的框架。
以下是如何通过SSRS Web服务获取给定报告的参数的示例:
'ReportingService is a reference to the WebService
Dim rs As New ReportingService
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim Reports() As ReportingService.CatalogItem
Reports = rs.ListChildren(ConfigurationManager.AppSettings("ReportPath"), True)
For Each item As ReportingService.CatalogItem In Reports
Dim historyID As String = Nothing
Dim forRendering As Boolean = True
Dim values As ReportingService.ParameterValue() = Nothing
Dim credentials As ReportingService.DataSourceCredentials() = Nothing
Dim params As ReportingService.ReportParameter() = Nothing
If item.Type = ReportingService.ItemTypeEnum.Report And item.ID = ReportID Then
params = rs.GetReportParameters(item.Path, historyID, forRendering, values, credentials)
Dim i As Integer = 0
For Each param As ReportingService.ReportParameter In params
'Display the parameter or add to a collection or whatever
Next
End If
Next
您可以使用上述方法获取所有参数,然后根据需要显示它们。然后,您所要做的就是收集结果,验证它们,然后将它们传递给ReportViewer。