2013-04-29 2 views
0

J'ai un rapport qui contient 3 jeux de données.Graphique en pied de page dans un sous-rapport Problème

DS1 - Numéro Région, District Nom/Numéro, Nom du test, Test Count, Charge de test pour le mois dernier

DS2 - Région Numéro du district Numéro, numéro de test, MMAAAA, Test Count, Charge d'essai pour l'année dernière, regroupés par MMAAAA

DR3 - Région Numéro Numéro de test, test Count MMAAAA, test de charge pour l'année dernière, regroupés par MMAAAA

Présentation du rapport

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)) 

Chaque jeu de données contient toutes les données respectives & J'effectue un RowFilter pour obtenir le sous-ensemble de données nécessaires pour le diagramme de district. Le problème que j'ai est que lorsque les cartes de région sont générées (le nombre de cartes peut être de 1 à 20 parce qu'il résume les totaux des districts), les graphiques affichent le nombre correct de fois, mais tous les graphiques affiche le les données du dernier RowFilter.

Autre que le rapport principal, j'ai essayé des combinaisons de & ReportStart Events Format. J'ai traversé le code & le RowFilter est exécuté pour chaque PanelNumber.

Le code est ci-dessous ....

Rapport principal

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 

SubReport 2 - Est-ce le graphique (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 

Répondre

1

Dans le code affiché pour * 1 (sous-état rptDetailExpRegion_Graph) * vous Boucler dans les lignes DataTable et remettre à plusieurs reprises DataSource de la sous-rapport/champs DataTable. Étant donné que l'événement de démarrage du rapport est levé une seule fois avant que le rapport ne commence à traiter la dernière fois que le DataSource sera utilisé.

Si je comprends bien ce que vous essayez de faire, une meilleure façon d'y parvenir est de définir la source de données du rapport parent sur l'intégralité du DataSet du Panel. De cette façon, la section Détail du rapport parent sera répétée pour chaque panneau. Dans la section Détail, vous pouvez placer un sous-rapport avec les graphiques ou vous pouvez placer les graphiques directement dans cette section et relier chaque graphique en fonction du panneau actuel.

Consultez le Subreports with Run-Time Data Sources walkthrough. Portez une attention particulière à la façon dont la clause Where du sous-rapport est modifiée dans l'événement Format de la section Détail (développez le Pour ajouter du code pour affecter une source de données pour l'en-tête. Le filtrage des données de sous-rapport est effectué dans l'événement de format de la section Détail, car cet événement est déclenché pour chaque enregistrement du rapport parent. Si ce filtrage était effectué dans l'événement ReportStart, il ne fonctionnerait pas car il ne s'appliquerait qu'à un seul filtre.