代码之家  ›  专栏  ›  技术社区  ›  Basic

VB.NET:如何在报表(.rdlc)中使用对象数据源

  •  2
  • Basic  · 技术社区  · 15 年前

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

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

    我有个东西在里面( EmployeeManager )它有一个 GetEmployees(Expression as Expression(Of Func(Of Employee, Boolean))) As IQueryable(Of Employee) 方法。

    因为我不想尝试直接传递lambda(至少在我得到一些有用的东西之前不会),所以我创建了一个 ReportData 类中包装 GetEmployees() 以IEnumerable(属于Employee)的形式调用并公开结果,这应该非常简单。它现在甚至没有参数。

    好啊。。。所以在我的报告中,我尝试添加一个新的数据源。我选了一种 Object 找到了 报表数据 上述类别。向导将完成并向项目中添加一个datasources文件夹,其中有一些XML定义了 <GenericObjectDataSource> 并指向 Report 班级。

    报表数据 也显示在“数据源”窗格中-它具有 > 在它旁边,但是当我扩展它时,它没有子对象。

    我不知道如何使用数据源-它似乎没有公开任何方法/成员(我甚至没有指定它应该调用 获取员工() 但是!)我当然看不到 IEnumerable(Of Employee) 任何地方。

    当我尝试向报表中添加表时,它提示我选择数据集,则“数据源”下拉列表中不显示报表数据源。

    我错过了什么?有人能给我指个方向吗?

    我的简单报表数据对象:

    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 这似乎表明我遵循了正确的步骤,但属性没有按预期显示。

    该类的公共属性现在显示在“数据源”窗口中,可以将它们拖放到报表中。

    这不会发生-属性从未出现

    编辑 :正如亚历克斯所指出的,我需要使用 属性 不仅仅是任何方法。请参阅下面的亚历克斯·埃塞尔菲的回答以获得澄清。这仍然没有解决我的问题,但让我更进一步…

    2 回复  |  直到 15 年前
        1
  •  4
  •   Alex Essilfie    15 年前

    根据您的描述和随附的代码,在 ReportData 类。如果我估计好的话,这个类应该生成 IEnumerable 您希望在报告中显示。

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

    我将快速完成一个项目,稍后将其添加到这个答案中。



    编辑1

    如何将类绑定到报表

    Visual Studio 2008

    1. 在中打开报告 设计视图 .
    2. 从菜单栏中选择 Data gt; Show Data Sources
    3. 点击 添加新数据源 在“数据源”窗口中。
    4. 选择 对象 然后点击 接下来 .
    5. 浏览解决方案树并选择要绑定到的类。
      在您的情况下,您绑定到 员工 班级。
    6. 点击 接下来 然后 完成 .


    Visual Studio 2010

    1. 在中打开报告 设计视图 .
    2. 从菜单栏中选择 View gt; Report Data
    3. 点击 New gt; Dataset... 在“数据源”窗口中。
    4. 输入数据集的名称(例如Employee)
    5. 创建 新数据源 或选择现有数据源。

      创建新数据源

      • 选择 对象 然后点击 接下来 .
      • 浏览解决方案树并选择要绑定到的类。
      • 点击 完成 .


    将类绑定到报告之后,继续照常设计报告。


    编辑2

    我为你上传了一个示例项目。这是 link .
    如果您需要进一步的澄清,请通知我,我会给您一个关于如何复制项目的步骤。

        2
  •  1
  •   R Putnam    14 年前

    我也有同样的问题。我必须向表示层添加一个数据源(对象类型),该数据源指向业务层中的对象(具有属性类的集合)。我在表示层中创建了报告(.rdlc),并将其指向数据源,一切都正常工作。这是我发现向报表公开字段属性的唯一方法。在运行时,我将报表数据源绑定到集合。我喜欢在业务层中设计一个“平面”集合,处理数据并将其发送给RDLC,使报告尽可能“哑”。

    推荐文章