【问题标题】:Using Microsoft Reports (.rdlc) in a 3-Tier app在 3 层应用程序中使用 Microsoft Reports (.rdlc)
【发布时间】:2010-09-16 12:31:42
【问题描述】:

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

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

BL 具有用于选择和操作实体的“管理器”对象。

现在我已经开始创建一个 .rdlc 报告,并选择了一个对象作为数据源,该对象包装了 BL 管理器以检索适当的记录。

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

我曾期望实例化我创建的报告(位于 BL 中)并将其传递给查看器 - 但这似乎不是它应该工作的方式?

我用谷歌搜索,只找到了对 ReportViewer 的引用,或者访问 rdlc 的 URL 或本地文件。

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

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

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

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

谁能指点我正确的方向。

非常感谢

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

【问题讨论】:

  • 你到底想做什么?您的报告是否依赖于解决方案中的某些内容(类/对象/资源)?
  • 抱歉耽搁了 - 会议。我很难让 ym 了解报告的实际显示方式。我已经使用了 Telerik 演示,它实例化了一个报表对象,设置了一些属性并将其传递给报表查看器。我认为这里发生的事情是我设计报表来处理数据类型 X,然后将报表查看器指向 rdlc 文件,然后在网页上有一个生成 X 类型数据并被查看器引用的数据源?简而言之,我有一个 rdlc - 如何显示它?
  • 我现在明白你的问题了。您已经设计了一个报表 (rdlc),并且希望在 ReportViewer 控件中显示它吗?
  • 很抱歉没有早点联系您。我目前正在做一个截止日期为明天的项目。我会尽快联系你。唯一需要注意的是,我只使用 Winforms。没有任何ASP。但只要是 .NET,我提供的任何帮助都应该足以为您指明正确的方向。
  • 不用担心 - 我知道它是怎么回事。我确信 winforms 方法应该足以将 em 指向正确的方向。干杯

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


【解决方案1】:

如前所述,我不做 ASP,所以我不知道这些项目中使用的资源是如何部署的。
在 WinForms 项目中,部署报表一般有两种选择:

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

这是说明这两个过程的代码。这是从my answer 到您的previous 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 库,发现 this article 涵盖了服务器报告。只需滚动到代码部分。我想它有你要找的东西。

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

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

  1. 将报表查看器的ProcessingMode 属性设置为服务器
  2. ServerReport.ReportServerUrl 属性中输入报告的路径(url)。
  3. ServerReport.ReportPath 属性中输入报告的位置。


结论:

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

【讨论】:

  • 感谢您的详细撰写。可能要等到明天我才能试用 - 到时我会回复你的。
  • 总是很开心。是否还有其他 MS Report 问题困扰着您?
  • 目前没有 - “不幸的是”,我已经被取消报告一两个星期了 :D 如果我得到更多,我会在这里评论让你知道:)
猜你喜欢
  • 1970-01-01
  • 2013-05-19
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多