我的问题类似于this one但我在实际实施方面遇到了一些问题。
我在3层应用的业务层中有一个报告(.rdlc)。
我在BL(EmployeeManager
)中有一个具有GetEmployees(Expression as Expression(Of Func(Of Employee, Boolean))) As IQueryable(Of Employee)
方法的对象。
因为我不想尝试直接传递lambda(至少在我工作之前没有),我在BL中创建了一个ReportData
类来包装{{1调用并将结果公开为IEnumerable(Of Employee) - 这应该非常简单。它目前甚至没有参数。
好的......所以在我的报告中,我试图添加一个新的数据源。我选择了一种GetEmployees()
并找到了上面提到的Object
类。向导完成并向项目添加一个DataSources文件夹,其中有一些XML定义ReportData
并指向<GenericObjectDataSource>
类。
Report
也出现在“数据源”窗格中 - 它旁边有一个ReportData
但是当我展开它时,它没有子项。
我不知道怎么做是使用数据源 - 它似乎没有暴露任何方法/成员(我甚至没有指定它应该调用>
!)和我当然无法在任何地方看到GetEmployees()
。
当我尝试向报表添加表格并提示我选择数据集时,ReportData数据源不会显示在数据源下拉列表中。
我错过了什么?有人可以指出我正确的方向吗?
我简单的ReportData对象:
IEnumerable(Of Employee)
我还发现this似乎表明我正在按照正确的步骤操作,但属性没有按预期显示
该类的公共属性现在显示在“数据源”窗口中,可以将它们拖放到报表中。
这不会发生 - 属性永远不会出现
编辑:正如亚历克斯所指出的,我需要使用属性,而不仅仅是使用任何方法。请参阅下面的Alex Esselfie的答案以获得澄清。这仍然没有解决我的问题,但让我更近了一步......
答案 0 :(得分:4)
根据您的说明和随附的代码,ReportData
类中没有属性。如果我认为,该类应该生成您想要在报告上显示的IEnumerable
。
如果是这种情况,您必须在向导中选择 Employee
类作为DataSource。这样您就可以在报告中显示数据。
我将在快速项目上工作并立即将其添加到此答案中。
修改1
Visual Studio 2008
Data
&gt; Show Data Sources
Visual Studio 2010
View
&gt; Report Data
New
&gt; “数据源”窗口中的Dataset...
。创建新数据源或选择现有数据源。
创建新数据源
将类绑定到报表后,请继续照常设计报表。
修改2
我为您上传了一个示例项目。这是link 如果您需要进一步澄清,请通知我,以便我逐步介绍如何复制项目。
答案 1 :(得分:1)
我遇到了同样的问题。我不得不在我的表示层添加一个数据源(对象类型),该层在业务层(带有属性类的集合)中指向我的对象。我在表示层创建了报告(.rdlc),并将其指向数据源,并且工作正常。这是我发现将字段属性公开给报表的唯一方法。在运行时,我将报表数据源绑定到集合。我喜欢在业务层设计一个“扁平”集合,处理数据并将其发送到rdlc,使报告尽可能“愚蠢”。