【发布时间】:2011-04-12 15:55:45
【问题描述】:
我的问题类似于this one,但我在实际实现中遇到了一些问题。
我在 3 层应用的业务层中有一个报告 (.rdlc)。
我在 BL (EmployeeManager) 中有一个对象,它有一个 GetEmployees(Expression as Expression(Of Func(Of Employee, Boolean))) As IQueryable(Of Employee) 方法。
由于我不想尝试直接传递 lambda(至少在我有工作之前不会),我在 BL 中创建了一个 ReportData 类,它包装了 GetEmployees() 调用和将结果公开为 IEnumerable(Of Employee) - 这应该非常简单。目前它甚至没有参数。
好的...所以在我的报告中,我尝试添加一个新的数据源。我选择了一种Object 并找到了上面提到的ReportData 类。向导完成并将 DataSources 文件夹添加到项目中,其中包含一些定义 <GenericObjectDataSource> 并指向 Report 类的 XML。
ReportData 也出现在“数据源”窗格中 - 它旁边有一个 >,但是当我展开它时,它没有子级。
我不知道该怎么做是使用数据源 - 它似乎没有公开任何方法/成员(我什至还没有指定它应该调用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,这似乎表明我正在遵循正确的步骤,但属性没有按预期显示
类的公共属性现在显示在“数据源”窗口中,可以将它们拖放到报表中。
这不会发生 - 属性永远不会出现
EDIT:正如 Alex 所指出的,我需要使用 properties 而不仅仅是任何方法。请参阅下面 Alex Esselfie 的回答以进行澄清。这仍然没有解决我的问题,但让我更近了一步......
【问题讨论】:
标签: .net reporting-services reporting rdlc objectdatasource