Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net:如何在报表(.rdlc)中使用对象数据源_.net_Reporting Services_Reporting_Rdlc_Objectdatasource - Fatal编程技术网

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

VB.Net:如何在报表(.rdlc)中使用对象数据源,.net,reporting-services,reporting,rdlc,objectdatasource,.net,Reporting Services,Reporting,Rdlc,Objectdatasource,我的问题与类似,但我在实际实现中遇到了一些问题 我在三层应用程序的业务层中有一个报告(.rdlc) 我在BL(EmployeeManager)中有一个对象,它有一个GetEmployees(表达式为表达式(函数(函数,布尔值)))作为IQueryable(员工的)方法 由于我不想尝试直接传递lambda(至少在我找到工作之前是这样),所以我在BL中创建了一个ReportData类,它封装了GetEmployees()调用,并将结果作为IEnumerable(Of Employee)公开,这应该非

我的问题与类似,但我在实际实现中遇到了一些问题

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

我在BL(
EmployeeManager
)中有一个对象,它有一个
GetEmployees(表达式为表达式(函数(函数,布尔值)))作为IQueryable(员工的)
方法

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

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

ReportData
也会出现在数据源窗格中-它旁边有一个
,但当我展开它时,它没有子项

我不知道如何使用数据源——它似乎没有公开任何方法/成员(我甚至还没有指定它应该调用
GetEmployees()
),而且我肯定在任何地方都看不到
IEnumerable(Of Employees)

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

我错过了什么?有人能给我指一下正确的方向吗

我的简单ReportData对象:

命名空间报告
公共类报表数据
私有财产EmployeeManager作为接口。IEEmployeeManager
公共分新()
''如果这是一个实例化问题,这个子组件就在这里-我打算在它正常工作时使用依赖注入。
Me.EmployeeManager=新员工经理
端接头
Public Sub New(ByVal EmployeeManager作为接口.ieemployeemanager)
Me.EmployeeManager=EmployeeManager
端接头
公共函数GetEmployees()作为IEnumerable(雇员的)
Return EmployeeManager.GetEmployees()
端函数
末级
结束命名空间
我还发现,这似乎表明我在遵循正确的步骤,但属性并不像预期的那样出现

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

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


编辑:正如Alex指出的,我需要使用属性,而不仅仅是任何方法。请参见下面Alex Esselfie的回答以获得澄清。这仍然没有解决我的问题,但让我更接近了…

从您的描述和附带的代码来看,
ReportData
类中没有属性。如果我计算得很好,那么该类应该生成要显示在报表上的
IEnumerable

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

我将做一个快速的项目,并将其添加到这个答案中



编辑1

如何将类绑定到报表 Visual Studio 2008

  • 在设计视图中打开报告
  • 从菜单栏中选择
    数据
    显示数据源
  • 在数据源窗口中单击添加新数据源
  • 选择对象,然后单击下一步
  • 浏览解决方案树并选择要绑定到的类。
    在本例中,您绑定到Employee类
  • 单击“下一步”,然后单击“完成”

  • Visual Studio 2010

  • 在设计视图中打开报告
  • 从菜单栏中选择查看报告数据
  • 在“数据源”窗口上单击“新建”
  • 数据集…
  • 输入数据集的名称(例如雇员)
  • 创建新数据源或选择现有数据源

    创建新数据源

    • 选择对象,然后单击下一步
    • 浏览解决方案树并选择要绑定到的类
    • 单击Finish

  • 将类绑定到报表后,继续像往常一样设计报表


    编辑2

    我为您上传了一个示例项目。这是我的建议。

    如果您需要进一步的澄清,请通知我,我将逐步向您介绍如何复制该项目。

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

    谢谢-你的意思是它实际上必须是一个属性而不是一个函数吗?我很感激这个示例项目,但我也会测试它…好的,将它更改为属性让我更进一步-我现在可以在“数据源”窗格中的数据源上看到一个子元素(GetEmployees())-但是当我添加一个表时,它仍然没有列出,它要求我提供一个数据集-我需要做些什么来使用da吗