【问题标题】:Using Object data source in ASP.NET 4 ReportViewer在 ASP.NET 4 ReportViewer 中使用对象数据源
【发布时间】:2011-05-13 23:04:27
【问题描述】:

好吧,我想我在这里生气了... 我认为这应该非常简单,但我就是不知道该怎么做。

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

那么 - 我该怎么做呢?我必须使用某种 DataSource 控件吗?如何让报表设计者了解业务对象?

谢谢!

咪咪

【问题讨论】:

    标签: asp.net reportviewer


    【解决方案1】:

    你关注this tutorial了吗?
    你必须做的就是:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          但这使得 Windows 应用程序可以正常工作,所以我所做的是创建一个单独的 Windows 项目,包括我想在该项目中绑定的对象并在表单项目上创建报告。然后我将该报告带入我的 Asp.net Web 应用程序并通过代码调用它。这是我用来执行此操作的几段代码。这是在 VB 中,但可以转换为 C#。我还有一个下拉列表,用于选择所需的报告和获取数据的案例语句。

          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
          

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

            • 是的,我当然看到了。它没有解释如何使用业务对象作为数据源,只解释了数据集和数据表。我正在寻找 BO 样本。
            猜你喜欢
            • 2010-10-27
            • 2011-04-27
            • 1970-01-01
            • 1970-01-01
            • 2013-02-04
            • 1970-01-01
            • 2011-02-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多