Comment ajouter un total reporté dans les formulaires DevExpress

Ajouter le sous-total

Ajouter un premier champ en bas de page avec la fonction “Running summary”

Ajouter le total reporté

Ajouter le script

Ajouter le script suivant dans la section “Script” du rapport

using System.Linq;
using DevExpress.XtraPrinting;


private void XtraReport_AfterPrint(object sender, System.EventArgs e) {
    
           var TotalReporteBricks = BrickSelector.GetBricksByXRControl(this.PrintingSystem.Document, TotalReporte).ToList();
           var TotalReporteTitreBricks = BrickSelector.GetBricksByXRControl(this.PrintingSystem.Document, TotalReporteTitre).ToList();
           var SousTotalFinPageBricks = BrickSelector.GetBricksByXRControl(this.PrintingSystem.Document, SousTotalFinDePage).ToList();

           for (int i = 0; i < TotalReporteBricks.Count; i++)
           {
               
             if (i > 0 && SousTotalFinPageBricks.Count() > i-1 )
             {
                 TotalReporteBricks[i].Text = SousTotalFinPageBricks[i -1].Text;
             }
             else
             {
                 TotalReporteTitreBricks[i].IsVisible = false; 
                 TotalReporteBricks[i].IsVisible = false; 
             }
           }
}


La Forestière (Procédé utilisable pour d’autres clients)

Pour le report de la Forestière, une alternative a dû être mise en place car pour la demande du client, le système de report du dessus ne fonctionnait pas (ne retournait pas de valeur, possiblement à cause du GroupHeader).

Pour le report en bas de page (la mention “À Reporter”), c’est le même procédé que mentionné plus haut (Section Ajouter un sous-total).

Pour ajouter le report sur la page suivante, la Forestière a un système bizarre qui fait que le report arrive avant les lignes dans le rapport DevExpress.

Pour le mettre en place, il faut mettre un GroupHeader. Ce GroupHeader doit avoir la case “Repeat Every Page” coché et mettre une expression sur le Visible: “[DataSource.CurrentRowIndex] != 0”. Cette expression sert à ne pas l’afficher sur la première page.

Les labels dans ce GroupHeader doivent être nommés (reprendre TotalReporte et TotalReporteTitre).

Mettre le script suivant :

string lastSum;
private void SousTotalFinDePage_SummaryCalculated(object sender, DevExpress.XtraReports.UI.TextFormatEventArgs e) {
    lastSum = e.Value.ToString();
}

private void TotalReporte_PrintOnPage(object sender, DevExpress.XtraReports.UI.PrintOnPageEventArgs e) {
    if (e.PageIndex == 0)
    {
        e.Cancel = true;
        return;
    }
    
    if(!string.IsNullOrEmpty(lastSum))
    {
        (sender as XRLabel).Text = lastSum;
    }
}