gpt4 book ai didi

c# - 微软报告 : Setting subreport parameters in code

转载 作者:可可西里 更新时间:2023-11-01 09:12:18 25 4
gpt4 key购买 nike

如何设置子报表的参数?我已成功连接到 SubreportProcessing 事件,我可以通过 e.ReportPath 找到正确的子报表,并且可以通过 e.DataSources.Add 添加数据源。但是我找不到添加报告参数的方法??

我发现有人建议将它们添加到主报告中,但我真的不想那样做,因为主报告根本不需要连接到子报告,除此之外正在包装子报表。

我使用一份报告作为主模板,打印报告名称、页码等。子报告将成为报告本身。如果我只能找到一种方法来设置子报告的那些报告参数,我会很高兴...

澄清: 创建/定义参数不是问题。问题是设置它们的值。我认为自然而然的事情就是在 SubreportProcessing 事件中进行。 SubreportProcessingEventArgs 实际上有一个 Parameters 属性。但它是只读的!那你怎么用呢?如何设置它们的值?

最佳答案

它确实有效,但确实有点小气。

我建议的第一件事是将您的报告开发为 .rdl。以这种方式测试报告要容易得多。您还可以将子报表参数设置为 rdl 并进行测试,确保子报表的每个参数也被定义为父报表的参数。一旦您获得报告(包括子报告)以这种方式工作,您可以将 .rdl 重命名为 rdlc 并将 rdlc 文件添加到您的 ReportViewer 项目中。无需进一步更改。使用 rdl 数据源的名称作为代码中的数据源名称,以向 SubreportProcessing 事件处理程序中的报表提供数据。

您不为传递的参数赋值。子报表将按原样使用它们。 (听起来你缺少的步骤是将参数添加到父报表以及上面提到的子报表。)你可以评估参数并将它们用作查询参数来获取你将添加的数据源。您必须在子报表的未发现维度上考虑数据源。在事件处理程序中调试时,您将不得不四处寻找以了解我的意思。您的应用程序中的某些值将随时可用,而您在其他地方轻松使用的其他值将抛出对象未找到异常。例如,我在应用程序主窗体上创建的类的实例中创建了一个数据集。我在整个应用程序中使用数据集。在 SubreportProcessing 事件处理程序中,我无法使用公共(public)数据集,因此我必须创建报告所需的表的新实例并填充它。在主报告中,我将能够访问公共(public)数据集。还有其他类似的限制。只需艰难前行即可。

这是来自工作的 VB.NET ReportViewer 应用程序的 SubreportProcessing 事件处理程序。展示了几种获取子报表数据源的不同方法。 subreport1 从应用程序业务对象构建一个单行数据表,subreport2 提供报告所需的数据而无需参数,subreport3 是 subreport2 但评估传递给子报表的参数之一以用于创建 ReportDataSource 的查询所需的日期值。

    Public Sub SubreportProcessingEventHandler(ByVal sender As Object, _
ByVal e As SubreportProcessingEventArgs)
Select Case e.ReportPath
Case "subreport1"
Dim tbl As DataTable = New DataTable("TableName")
Dim Status As DataColumn = New DataColumn
Status.DataType = System.Type.GetType("System.String")
Status.ColumnName = "Status"
tbl.Columns.Add(Status)
Dim Account As DataColumn = New DataColumn
Account.DataType = System.Type.GetType("System.String")
Account.ColumnName = "Account"
tbl.Columns.Add(Account)
Dim rw As DataRow = tbl.NewRow()
rw("Status") = core.GetStatus
rw("Account") = core.Account
tbl.Rows.Add(rw)
e.DataSources.Add(New ReportDataSource("ReportDatasourceName", tbl))
Case "subreport2"
core.DAL.cnStr = My.Settings.cnStr
core.DAL.LoadSchedule()
e.DataSources.Add(New ReportDataSource("ScheduledTasks", _
My.Forms.Mother.DAL.dsSQLCfg.tSchedule))
Case "subreport3"
core.DAL.cnStr = My.Settings.cnStr
Dim dt As DataTable = core.DAL.GetNodesForDateRange(DateAdd("d", _
-1 * CInt(e.Parameters("NumberOfDays").Values(0)), _
Today), _
Now)
e.DataSources.Add(New ReportDataSource("Summary", dt))
End Select
End Sub

关于c# - 微软报告 : Setting subreport parameters in code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/456982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com