我的报告有3个数据集。
DS1 - 上个月的地区编号,地区名称/编号,测试名称,测试计数,测试费用
DS2 - 地区编号区号,测试编号,MMYYYY,测试计数,去年的测试费用,按MMYYYY分组
DS3 - 地区编号测试编号,MMYYYY,测试计数,去年的测试费用,按MMYYYY分组
报告布局
Region Name (GroupHeader)
District Name(GroupHeader)
Test Name (Details Section)
District Chart, bar chart of the last 12 months activity for a district/test combo (DS2) (GroupFooter)
Region Charts (GroupFooter –(the number of charts can be 1 to 20 based on the district data))
每个数据集包含所有相应的数据和数据。我执行一个RowFilter来获取区域图所需的数据子集。
我遇到的问题是当生成区域图表时(图表的数量可以是1到20,因为它总结了区域总数),图表显示正确的次数,但所有图表都显示数据来自最后一个RowFilter。
除主报告外,我已尝试过格式和组合的组合。 ReportStart活动。我已经完成了代码&为每个PanelNumber执行RowFilter。
守则如下......
主要报告
Private Sub grpRegionFooter_Format(sender As System.Object, e As System.EventArgs) Handles grpRegionFooter.Format
Dim rpt As New rptDetailExpRegion_Graph
Dim iWhere As String = txtRegion.Value.ToString.Trim
Dim WhereClause As String = "Region = " + iWhere.Trim
SubReport2.Report = rpt
rpt.DataTable = dsGraphData.Tables(2)
rpt.Where = WhereClause
rpt.Text = txtRegion.Text
End Sub
SubReport 1(rptDetailExpRegion_Graph)
Private Sub rptDetailExpRegion_Graph_ReportStart(sender As Object, e As System.EventArgs) Handles Me.ReportStart
Dim Panels As DataTable
Dim DR As DataRow
Dim WhereClause As String = Where
Panels = DS.DefaultView.ToTable(True, "PanelNumber")
Panels.DefaultView.Sort = "PanelNumber"
For Each DR In Panels.Rows
Dim rpt As New rptDetailExpRegion_Graph2
WhereClause = Where + " AND PanelNumber = " + DR.Item(0).ToString
srRegionGraphs.Report = rpt
rpt.Where = WhereClause
DS.DefaultView.RowFilter = WhereClause
rpt.DataSource = DS.DefaultView
rpt.DataSource = DS.DefaultView
rpt.DataTable = DS
Next
End Sub
子报告2 - 图表(rptDetailExpRegion_Graph2)
Private Sub GroupHeader1_Format_1(sender As System.Object, e As System.EventArgs) Handles GroupHeader1.Format
Dim WhereClause As String
WhereClause = "Region = " + txtRegion.Text + " and PanelNumber = " + txtPanelNumber.Text
ds1 = New DataView(DS, WhereClause, "Region", DataViewRowState.CurrentRows)
srRegionGraphs.DataSource = ds1
End Sub
答案 0 :(得分:1)
在您为* SubReport 1(rptDetailExpRegion_Graph)*发布的代码中,您循环遍历DataTable行并重复设置子报表的DataSource / DataTable字段。由于报表启动事件仅在报表开始处理之前仅处理一次,因此仅处理数据源的最后一次使用。
如果我理解你正在尝试做什么,更好的方法是将父报告的数据源设置为整个Panel的DataSet。这样,父报告的详细信息部分将针对每个面板重复。在“详细信息”部分中,您可以使用图表放置子报表,也可以直接将图表放在该详细信息部分中,并根据当前面板重新绑定每个单独的图表。
查看Subreports with Run-Time Data Sources walkthrough。请特别注意在详细信息部分的Format事件中如何修改子报表的Where子句(展开添加代码以为子报表(rptSub)标题分配数据源)。子报表数据的过滤在详细信息部分的格式事件中完成,因为该事件是针对父报表中的每个记录引发的。如果在ReportStart事件中完成了该过滤,那么它将不起作用,因为它只应用一个过滤器。