在3层应用程序中使用Microsoft Reports(.rdlc)

时间:2010-09-16 12:31:43

标签: .net visual-studio reporting-services rdlc

我是报道的新手,因此需要一些好的信息/资源来帮助我在我们的3层应用中设置一些报告。

我们目前拥有:UI(目前是ASP.Net MVC 2,未来还有winforms),业务逻辑和DAL(实体框架 - 仅限代码,即没有edmx)

BL有“经理”对象,用于选择和操纵实体。

现在我开始创建一个 .rdlc 报告,并选择一个包装BL管理器来检索相应记录的对象作为数据源。

现在我正在尝试添加一个前端来查看我的报告是否有效...我相信没有好的方法以纯MVC方式执行ReportViewer,所以我打算使用.aspx webform。我添加了ReportViewer控件,但我不确定如何将其连接到我的报告...

我原本希望实例化我创建的报告(它存在于BL中)并将其传递给查看者 - 但这似乎不是它应该工作的方式?

我已经google了,并且只找到了对ReportViewer的引用,无论是访问rdlc的URL还是本地文件。

(目前,假设我无法访问SSRS)

我看不到本地文件或网址如何帮助我。如果我使用本地路径直接指向rdlc,我不知道如何正确初始化ObjectDataSource - 它依赖于依赖注入并且具有很多依赖性。

如果我指向一个URL,我可能需要一个报告服务器 - 如果报告存在于那里,那么它就无法引用我的业务逻辑/ DAL - 这意味着我正在维护两种访问数据的方法平行 - 这对我来说似乎很糟糕。

我显然接近这个错误,但我发现的大多数教程都假设报告都存在于UI层中并且在webform本身上指定了数据源 - 这不是我在这种情况下所需要的。从理论上讲,我应该能够为BL提供一个winforms前端,让它以最小的努力生成完全相同的报告。

有人可以指出我正确的方向。

非常感谢

如果相关,我使用的是.Net 4,VS2010,MVC 2和IIS 7.

1 个答案:

答案 0 :(得分:1)

正如我先前所说,我不做ASP,所以我不知道如何部署这些项目所使用的资源 在WinForms项目中,通常有两种用于部署报告的选项:

  • 嵌入式资源(包含在输出可执行文件中)
  • 内容(复制到输出目录)

以下是说明这两个程序的代码。它是从my answerprevious question的摘录。

With rptVwr.LocalReport
    'use this if the report is embedded in the project                     '
    'the name is of the following format [ProjectNamespace].[ReportName]   '
    .ReportEmbeddedResource = "ObjectReport.SampleReport.rdlc"

    'use the ReportPath if the report is stored somewhere else             '
    .ReportPath = "C:\Path\to\your\report" 'For demonstration purposes only'
End With

正如您所看到的,当嵌入报告时,您只需按照随附的评论中的说明分配报告。

我认为,根据项目的性质,您应该在“属性”窗口中将报告的构建操作设置为嵌入式资源。这样,就可以从部署的任何地方访问它。


编辑1
我查看了MSDN Library,发现this article涵盖了服务器报告。只需滚动到代码部分即可。我认为它有你想要的东西。

还有an article on CodeProject广泛涵盖了您的请求。

浏览后,您似乎必须执行以下操作:

  1. 将报告查看器的ProcessingMode属性设置为服务器
  2. ServerReport.ReportServerUrl属性中输入报告的路径(网址)。
  3. ServerReport.ReportPath属性中输入报告的位置。
  4. Properties Window for Server Reports


    结论:

    部署桌面应用程序时,请使用ReportViewer控件的 LocalReport 属性,并将 ProcessingMode 设置为 Local 。 部署基于Web的项目时,请使用ReportViewer控件的 ServerReoprt 属性,并将 ProcessingMode 设置为 Remote