将RDLC数据源设置为对象的问题

War*_*2d2 19 c# asp.net-mvc reportviewer rdlc

背景:

我的任务是将Access数据库应用程序转换为ASP.Net C#MVC.这是我的第一个MVC应用程序.

有10份报告需要转换.我们正在使用RDLC文件和reportviewer.我正在使用Visual Studio 2010以及所有最新的补丁.我们正在连接到已由现有Access数据库填充的SQL Server数据库,因此表结构几乎是一成不变的,否则我们将不得不尝试转换10年的数据.

我已完成除两份报告之外的所有报告.最终报告需要更多处理,而不仅仅是显示数据库中的数据.最简单的方法是创建一个C#对象并执行所有处理服务器端,然后使用RDLC显示结果.

问题

我遇到的问题是Visual Studio无法识别我创建的对象作为潜在的数据源.每次我尝试"添加数据集"时,它都会显示"数据源配置向导",并且只提供SQL Server数据库作为可能的数据连接.我知道存在一个允许您选择对象作为数据集的屏幕,但我从未看到该屏幕.

以下是对象(为清晰起见,删除了处理功能):

public class TurnAroundVal
{
    // Registration Package information
    public string dataType { get; set; }

    // Calculated totals; values only set through constructor or calculation function
    public int packageCount { get; private set; }
    public int dayCount { get; set; }
    public double avgTurnAround { get; private set; }
    public int upperRange { get; private set; }
    public int lowerRange { get; private set; }
}

public class TurnAroundVals
{
    // Public Variables
    public IEnumerable<TurnAroundVal> TurnArounds { get; private set; }
    public DatePass dates { get; set; }
    public int pkgTotal { get; private set; }
    public double dayTotal { get; private set; }
    public double avgAllTurnArounds { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

我也愿意使用IEnumerable的"TurnAroundVal"作为数据源,并将日期,整数和双精度作为参数传递.要么工作.

我是否缺少Visual Studio 2010中的设置以允许RDLC Designer查看我创建的对象?即使我认为这适用于我定义的类,我也错了吗?

回答

所有给出的建议都很有帮助,但最终让我能够工作的是在同一个解决方案中创建一个临时的非Web项目并在那里创建RDLC.当我去添加数据集时,它会显示"对象"作为选项.您必须添加对Web项目的引用,以便您的对象可见,但是您可以选择所需的对象并在RDLC中使用它.之后,您只需将RDLC文件拖放到Web项目中,删除临时项目,就可以了.请记住,您必须在代码中手动添加数据源,并且它们必须与您在RDLC中指定的名称相同.

Mar*_*SIO 3

  1. 确保这些类与应用程序位于同一名称空间中。
  2. 在创建报告之前尝试构建应用程序
  3. 启动报告向导。在 DataSouce 下选择您的 Web 应用程序的名称。
  4. 在“可用数据集”下,您应该会看到 Visual Studio 解释为您的“选择方法”的内容。如果一切顺利的话,这应该是逆转。

您可能需要将类文件放在App_Data或App_Code文件夹中,但我不确定。

这也可能有帮助。

http://msdn.microsoft.com/en-us/library/ms251692%28v=vs.100%29.aspx

  • 已经尝试过所有这些,但这仍然是很好的信息。我最终要做的是在同一解决方案中创建一个新的非 Web 项目,在那里创建 RDLC,然后将其拖/放到 Web 项目中。可能有一种不太笨拙的方法可以做到这一点,但这确实有效。 (2认同)