这就是我要做的事情: 我想使用ASP.NET 4(VS 2010)中的ReportViewer控件创建一个rdlc报告,并且,作为其数据源,使用具有某些属性的类。 我尝试了我能想到的一切,但我无法弄清楚这一点。我发现的所有文档都声明该对象应该出现在网站的DataSource窗格中,但我不能让它出现在那里。 我希望类的字段出现在报告desiger中,以便我可以使用它们 - 但我也不能这样做。 使用设计器,我只能定义新的数据集 - 我不想使用数据集,而是使用业务对象!
那么 - 我怎么能这样做?我是否必须使用某种DataSource控件?如何让报表设计者了解业务对象?
谢谢!
MEMI
答案 0 :(得分:4)
你跟着this tutorial了吗? 你必须做的一切是:
现在,您可以从报表设计器中选择业务类中的方法作为数据集,并从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