【问题标题】:Is the ReportViewer web control acceptable for an enterprise web application企业 Web 应用程序是否可以接受 ReportViewer Web 控件
【发布时间】:2011-08-24 09:48:04
【问题描述】:

我一直在通过报表服务器远程运行报表的网络表单应用程序中试验 ReportViewer 控件。感觉 ReportViewer 中的 Parameter 接口有限制。我认为另一种选择是创建自己的 Web 表单控件,将参数传递给 ReportViewer 并绕过默认参数接口。我在 SSRS 方面的经验非常少,我想知道这是否是一个可行的解决方案,或者它是在自找麻烦。 (即新报告可能会导致必须创建新的用户界面)。我想我的问题是报表查看器中的标准用户界面是否适合企业级应用程序。我不是在谈论分页控件,更多的是关于下拉列表和复选框列表。

【问题讨论】:

    标签: reporting-services reportviewer


    【解决方案1】:

    如果您的报告通常使用简单的参数集,则默认界面可以很好地工作(尤其是如果您的用户更精通)。但是更大更复杂的参数集很快就会在默认界面中变得不堪重负(如果您不希望您的用户如此精明,这可能是一个更大的问题)。

    我在处理大量报告时遇到了类似的问题。有些可能非常简单(即,没有参数或简单的日期范围),有些可能过于复杂(超过 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。

    【讨论】:

    • 谢谢,这很有帮助。我想默认 UI 的好处在于它可以处理参数级联的常见场景。
    • @ek_ny 在编写新 UI 时,您肯定需要考虑这一点。但是,这样做会进一步提高可定制性(当然,代价是花费时间来实现新功能)。我觉得默认 UI 中缺少的重要东西是验证工具。
    猜你喜欢
    • 2012-04-08
    • 2011-04-12
    • 2011-08-06
    • 1970-01-01
    • 2010-11-08
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多