2011-05-12 107 views
0

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

回答

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。

+0

谢谢,这是非常有益的。我想关于默认用户界面的好处是,它可以处理参数级联的常见场景。 – 2011-05-13 12:12:20

+0

@ek_ny在编写新的UI时,您肯定需要考虑这一点。但是,这样做可以进一步实现可定制性(当然,以实现新功能花费的时间为代价)。我觉得缺乏默认UI的重要事情是验证工具。 – 2011-05-13 13:35:28

相关问题