子报表中的页脚图表

时间:2013-04-29 21:34:47

标签: vb.net visual-studio-2008 activereports

我的报告有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

1 个答案:

答案 0 :(得分:1)

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

如果我理解你正在尝试做什么,更好的方法是将父报告的数据源设置为整个Panel的DataSet。这样,父报告的详细信息部分将针对每个面板重复。在“详细信息”部分中,您可以使用图表放置子报表,也可以直接将图表放在该详细信息部分中,并根据当前面板重新绑定每个单独的图表。

查看Subreports with Run-Time Data Sources walkthrough。请特别注意在详细信息部分的Format事件中如何修改子报表的Where子句(展开添加代码以为子报表(rptSub)标题分配数据源)。子报表数据的过滤在详细信息部分的格式事件中完成,因为该事件是针对父报表中的每个记录引发的。如果在ReportStart事件中完成了该过滤,那么它将不起作用,因为它只应用一个过滤器。