.net - VB.Net : How to use an Object data source in report (. RDLC)

标签 .net reporting-services reporting rdlc objectdatasource

我的问题类似于this one但我在实际实现中遇到了一些问题。

我在 3 层应用程序的业务层中有一个报告 (.rdlc)。

我在 BL ( EmployeeManager ) 中有一个对象,它有一个 GetEmployees(Expression as Expression(Of Func(Of Employee, Boolean))) As IQueryable(Of Employee)方法。

由于我不想尝试直接传递 lambda(至少在我有东西工作之前),所以我创建了一个 ReportData BL 中的类包装了 GetEmployees()调用并将结果公开为 IEnumerable(Of Employee) - 这应该非常简单。目前它甚至没有参数。

好的...所以在我的报告中,我尝试添加一个新的数据源。我选择了 Object 的类型并找到ReportData上面提到的类。向导完成并向项目添加一个 DataSources 文件夹,其中包含一些定义 <GenericObjectDataSource> 的 XML。并指向Report类。

ReportData也出现在“数据源” Pane 中 - 它有一个 >在它旁边,但当我展开它时,它没有子项。

我不知道该怎么做是使用数据源 - 它似乎没有公开任何方法/成员(我什至还没有指定它应该调用 GetEmployees()!),我当然可以没有看到IEnumerable(Of Employee)任何地方。

当我尝试向报表添加表并提示我选择数据集时,ReportData 数据源未显示在数据源下拉列表中。

我错过了什么?有人可以指出我正确的方向吗?

我的简单 ReportData 对象:

Namespace Reports
    Public Class ReportData

        Private Property EmployeeManager As Interfaces.IEmployeeManager

        Public Sub New()
            ''This sub is here in case it's an instantiation problem - I intend to use dependency injection when I've got this working properly.
            Me.EmployeeManager = New EmployeeManager
        End Sub

        Public Sub New(ByVal EmployeeManager As Interfaces.IEmployeeManager)
            Me.EmployeeManager = EmployeeManager
        End Sub

        Public Function GetEmployees() As IEnumerable(Of Employee)
            Return EmployeeManager.GetEmployees()
        End Function
    End Class
End Namespace

我还发现了this这似乎表明我正在遵循正确的步骤,但属性并未按预期显示

The public properties of the class now appear in the Data Sources window, where they can be dragged and dropped into the report.

这不会发生 - 属性永远不会出现

编辑:正如亚历克斯所指出的,我需要使用属性而不仅仅是任何方法。请参阅下面 Alex Esselfie 的回答以进行澄清。这仍然没有解决我的问题,但让我更近了一步......

最佳答案

根据您的描述和随附的代码,ReportData 类中没有属性。如果我猜对了,该类应该生成您想要在报告上显示的 IEnumerable

如果是这种情况,您必须在向导中选择 Employee 类作为数据源。这将允许您在报告中显示数据。

我将开发一个快速项目,稍后将其添加到此答案中。



编辑 1

如何将类绑定(bind)到报表

Visual Studio 2008

  1. 设计 View 中打开报表。
  2. 从菜单栏中选择数据 > 显示数据源
  3. 点击“数据源”窗口中的添加新数据源
  4. 选择对象,然后点击下一步
  5. 浏览解决方案树并选择要绑定(bind)的类。
    在您的例子中,您绑定(bind)到 Employee 类。
  6. 点击下一步,然后点击完成


Visual Studio 2010

  1. 设计 View 中打开报表。
  2. 从菜单栏中选择查看 > 报告数据
  3. 在“数据源”窗口中单击新建 > 数据集...
  4. 输入数据集的名称(例如 Employee)
  5. 创建新数据源或选择现有数据源。

    创建新数据源

    • 选择对象,然后点击下一步
    • 浏览解决方案树并选择要绑定(bind)的类。
    • 点击完成


将类绑定(bind)到报告后,继续像往常一样设计您的报告。


编辑2

我为您上传了一个示例项目。这是link .
如果您需要进一步说明,请通知我,以便我为您提供有关如何复制该项目的分步过程。

关于.net - VB.Net : How to use an Object data source in report (. RDLC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3717517/

相关文章:

reporting-services - 如何在SSRS报告服务中将行组标题扩展到列?

sql - 关于已知模式的自定义用户驱动报告

sql - 上传报告时出错

c# - POP3 协议(protocol)是否必须在邮件服务器中实现?

reporting-services - Reporting Services 表达式在某些情况下会出错

.net - 我可以将 silverlight dll(仅反射)加载到 .net 应用程序中吗?

sql-server-2008 - 如何用 Reporting Services 表达式语言编写 if else 语句?

mysql - Solr 使用 group by 搜索和 having 子句进行报告

c# - 输入数组比该表中的列数长。异常(exception)

.NET 远程处理与 SOA