ASP.NET-MVC中的ReportViewer数据源

7

如何在asp.net MVC项目中集成ReportViewer

我想添加MVCProject.Model命名空间的业务对象。 ReportViewer允许使用DataSet的业务对象。

是否可以选择其他数据源,例如LinqDataSource或直接使用LINQ-to-SQL类对象?

在MVC项目中添加报告的最佳解决方案是什么?

4个回答

2
我有一个未经测试但可能有效的想法。 1- 在标准的ASP.Net Web表单页面(例如ReportViewer.aspx)中放置报告查看器控件。 2- 在您的MVC下,添加一个引用到此ReportViewer.aspx页面的iframe。 3- 使用会话或查询字符串将参数传递给页面。
如果这个方法可行,请告诉我。

这是我目前的 - 糟糕透顶的 - 想法。我相信它会起作用,但我更希望有一些更优雅的东西。 - vbullinger

2
一种替代方法是在报告服务器上生成报告,然后将其作为PDF流式传输到MVC应用程序中。

1

这会很困难。首先,您需要ViewState,因此需要在常规WebForms页面中托管报告。不过这并不太糟糕- WebForms和MVC可以很好地并存。

困难的部分是绑定到真正的IEnumerable对象,而不是那些虚假的ObjectDataSources。

第一步是构建报告数据模型。您可以使用代码、查询或任何其他方式来完成此操作。一个类似于以下结构(但显然更大)的结构是典型的:

public class ReportSource
{   
   public Floogle[] Floogles { get; set; }
}

public class Floogle
{
    public Doodad[] Doodads { get; set; } 
    public string Text { get; set; }
}

public class Doodad
{
    public int Number { get; set; }
}

技巧是在报告中使用BindingSource控件,并将DataSource属性设置为typeof(ReportSource) - 是的,数据源是您的报告模型类型。
在设计报告时,您不会得到很多丰富性,但是您将能够完成它。
就第三方报告解决方案而言,我们发现Telerik是最佳选择。

我应该在哪里使用这个BindingSource? - André Miranda
首先,很抱歉您不得不使用这个可怕的工具。BindingSource是一个“控件”,可以将其“拖动”到设计师表面上。 - Matt Hinze
MVC并没有为可拖放绑定控件设计。当然,您可以“黑客攻击”它们以与MVC一起使用(因为MVC仍然建立在与WebForms相同的基础上),但这违反了MVC范例,因此不建议使用。如果您必须使用MVC来使用现有报告,则Shiraz的答案非常好。 - Matt Kocaj
是的,我知道。顺便说一句,我们已经完全放弃了像这样的工具,转而使用一种将HTML转换为PDF的工具(使用CSS3的页面头等内容)。 - Matt Hinze

0

我在CodePlex上发布了一个小项目,它是一个带有报告的MVC项目。

http://mvctaskmanagement.codeplex.com/

基本上,由于我在XP框上进行开发,我的Web表单必须被推到一个单独的项目中。由于我有一个服务层项目,所以我把它放在那里。

从那里,我通过ajax post调用我的报告,将参数发送到报告页面,然后将其传递给用于生成预览的相同服务层。

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接