在ASP.NET 4 ReportViewer中使用对象数据源

时间:2010-11-22 16:34:40

标签: asp.net reportviewer

好吧,我想我在这里生气了...... 我认为这应该是超级简单的,但我无法弄清楚如何做到这一点。

这就是我要做的事情: 我想使用ASP.NET 4(VS 2010)中的ReportViewer控件创建一个rdlc报告,并且,作为其数据源,使用具有某些属性的类。 我尝试了我能想到的一切,但我无法弄清楚这一点。我发现的所有文档都声明该对象应该出现在网站的DataSource窗格中,但我不能让它出现在那里。 我希望类的字段出现在报告desiger中,以便我可以使用它们 - 但我也不能这样做。 使用设计器,我只能定义新的数据集 - 我不想使用数据集,而是使用业务对象!

那么 - 我怎么能这样做?我是否必须使用某种DataSource控件?如何让报表设计者了解业务对象?

谢谢!

MEMI

5 个答案:

答案 0 :(得分:4)

你跟着this tutorial了吗? 你必须做的一切是:

  • 定义您的DTO类或使用EF4(例如)
  • 生成它
  • 使用某些方法(如GetAll ...)
  • 定义您的业务类
  • 构建您的解决方案(这很重要)

现在,您可以从报表设计器中选择业务类中的方法作为数据集,并从DTO类中选择拖放字段 当您选择要在reportviewer中显示的报告时,将为您添加数据源对象

答案 1 :(得分:0)

我发现this博客非常有帮助 为rdlc创建新数据源时,在“数据集属性”对话框中:
1)在Data source下拉列表中,选择包含包含公共方法的类的命名空间(参见#2) 2)在“可用数据集”下拉列表中,选择返回业务对象的IQueryable的公共方法。

答案 2 :(得分:0)

您的业务对象类是否标记为公开?我在视频中看到它必须是公开的。

答案 3 :(得分:-1)

我遇到了同样的问题并找到了解决方法。出于某种原因,如果您开发ASP.NET应用程序,Microsoft会带走添加新数据源功能。周围的方式并不好,但确实有效。我使用所有对象,并且我使用企业库,并且我想将我的对象用于我的报告,只有这样才有意义,因为它们不能让你这样做。我不知道微软为什么不允许这个功能用于网络应用程序。

但是这会让Windows应用程序运行起来,所以我所做的就是创建一个单独的Windows项目,包括我要在该项目中绑定的对象,并在表单项目上创建报告。然后我将该报告带入我的Asp.net网络应用程序并通过代码调用它。以下是我用来执行此操作的一些代码。这是在VB中,但可以转换为C#。我还有一个下拉列表,用于选择所需的报告和获取数据的case语句。

Private Sub LoadReport()

    Try
        pnlReport.Visible = True

        Dim Dal As New DataAccess
        Dim objRptOutputData = New Model.RptClientCollection
        Dim lr As LocalReport = OutputReportViewer.LocalReport
        Dim rds As New ReportDataSource

        lr.DataSources.Clear()

        OutputReportViewer.Visible = True
        OutputReportViewer.ProcessingMode = ProcessingMode.Local
        OutputReportViewer.LocalReport.EnableHyperlinks = True

        Dim SelectedReport As Integer = 0

        If Me.ddlReport.SelectedItem.Value IsNot "" Then
            SelectedReport = Me.ddlReport.SelectedItem.Value
        End If

  Select Case SelectedReport
      Case ConstantEnum.Reports.ActiveWaitingList

        objRptOutputData = Dal.GetRptClientsByStatus(ConstantEnum.Status.ActiveWaitingList)
        lr.ReportPath = "Reporting\Report1.rdlc"
        rds.Name = "dsClient"
        rds.Value = objRptOutputData
        Me.lblCount.Text = "Count: " & objRptOutputData.Count
      Case ConstantEnum.Reports.InactiveWaitingList
        ' This is a small app I have about 15 case statements if it was bigger I would of done this selection a bit different. 

        End Select



        lr.DataSources.Add(rds)
        lr.Refresh()
        OutputReportViewer.DataBind()

    Catch ex As Exception
        ExceptionUtility.SendError(ex, "Reports", "LoadReport")
    End Try
End Sub

答案 4 :(得分:-2)

你见过这个早期版本吗?这就是你需要的:

http://msdn.microsoft.com/en-us/library/ms252073(v=VS.80).aspx