0

我有一份包含 3 个数据集的报告。

DS1 – 上个月的地区编号、地区名称/编号、测试名称、测试计数、测试费用

DS2 – Region Number District Number, Test Number, MMYYYY, Test Count, Test Charge for last year,按 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,因为它汇总了地区总数),图表显示正确的次数,但所有图表都显示上次的数据行过滤器。

除了主报告之外,我还尝试了 Format 和 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

子报表 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

SubReport 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
4

1 回答 1

1

在您为 *SubReport 1 (rptDetailExpRegion_Graph)* 发布的代码中,您正在循环遍历 DataTable 行并重复设置子报表的 DataSource/DataTable 字段。由于报表开始事件仅在报表开始处理之前引发一次,因此只有最后一次使用 DataSource。

如果我正确理解您要做什么,更好的方法是将父报表的数据源设置为整个面板的数据集。这样,父报告的详细信息部分将针对每个面板重复。在详细信息部分中,您可以放置​​带有图表的子报表,也可以将图表直接放在该详细信息部分中,然后根据当前面板重新绑定每个单独的图表。

查看带有运行时数据源的子报表演练。特别注意子报表的 Where 子句如何在 Detail 部分的 Format 事件中修改(展开To add code 为 Child Report (rptSub)标题分配数据源)。子报表数据的过滤是在详细信息部分的格式事件中完成的,因为该事件是针对父报表中的每条记录引发的。如果在 ReportStart 事件中完成了该过滤,则它将不起作用,因为它只会应用一个过滤器。

于 2013-04-29T23:10:55.820 回答