Total reporté
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 un nouveau label dans le bas de page
Ouvrir les propriétés “Summary”
Dans le “Summary editor définir
Summary running → Report
Summary function → Running Summary
Argument expression → [VeTeteDocum.ChildVE_LIGNE_DOCUM.Total ligne HT]
Définir le nom du champ avec “SousTotalFinDePage“ dans les propriétés
Ajouter le total reporté
Ajouter un nouveau label pour le titre du total reporté dans le haut de page
Lui donner un text et le nom “TotalReporteTitre“ dans les propriétés
Ajouter un nouveau label pour le total reporté
Lui donner le nom “TotalReporte“ dans les propriétés
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;
}
}