Je pense que beaucoup de développeurs sont confrontés au problème de l'affichage des numéros de page à l'aide de SSRS 2008 R2.
Il existe une solution alternative qui requiert SSRS 2010 + version . Sinon, vous aurez 1 tout le temps.
Aller à "Rapport" -> "Propriétés du rapport" -> "Code"
Dans la section Custom Code
, entrez les informations suivantes:
Public Function PageNumber() as String
Dim str as String
str = Me.Report.Globals!PageNumber.ToString()
Return str
End Function
Public Function TotalPages() as String
Dim str as String
str = Me.Report.Globals!TotalPages.ToString()
Return str
End Function
Vous pourrez désormais accéder à ces fonctions n’importe où dans le rapport (en-tête, corps ou pied de page). Ainsi, pour afficher le nombre de pages et le nombre total de pages dans une zone de texte située dans le corps, entrez simplement ceci comme valeur:
="Page " + Code.PageNumber() + " of " + Code.TotalPages()
Cette solution NE FONCTIONNE PAS avec SSRS 2008 R2.
Cependant, il existe une solution de contournement, cela fonctionnera avec toute version supérieure à 2008 R2
(inclure 2008 R2). Je répondrai en espérant que cela aidera certaines personnes, quel que soit leur problème.
Vous devez d’abord utiliser les variables de rapport: , Faites un clic droit sur l’espace vide du rapport -> Variables -> Créez une variable telle que PageCount (définissez la valeur par défaut sur 0)
Puis dans votre en-tête ou votre pied de page -> créer une zone de texte et définir une expression ->
=Variables!PageCount.SetValue(Variables!PageCount.Value+1)
Il augmentera automatiquement pour chaque page. ( IMPORTANT: NE le masquez PAS de l'en-tête ou du pied de page, SetValue NE FONCTIONNE PAS si vous masquez la zone. faites ce que vous voulez, mais ne le cachez PAS (il affichera la mention "True" si le réglage a eu lieu))
Ensuite, vous pouvez utiliser:
=Variables!PageCount.Value
n’importe où dans le corps de votre rapport pour accéder au numéro de page.
IMPORTANT: Veuillez noter que j'ai essayé d'utiliser Globals! PageNumber pour définir la variable, mais que celle-ci n'était PAS accessible à partir du corps du rapport. Il doit donc s'agir d'un élément à la fois accessible à partir de l'en-tête/du pied de page OR Corps.
Dans mon cas, je dois réinitialiser le numéro de page pour chaque instance de mon groupe. Je viens donc de définir un déclencheur à la fin du groupe. (par exemple, je vérifie si ma valeur totale est renvoyée, car je sais que pour chaque extrémité de mon groupe, le nombre total affiché est affiché.
En raison de la fonction IIF
, les parties vraie et fausse seront traitées. Par conséquent, si vous placez des séparateurs dans IIF
, comme ci-dessous:
=IIF(IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(Variables!PageCount.Value+1),Variables!PageCount.SetValue(0))
)
vous aurez toujours la valeur 0 tout le temps, parce que le rapport vérifiera la partie vraie puis la partie fausse, les deux calculateurs seront exécutés (la valeur sera définie deux fois)
nous avons donc besoin de 2 cases et de quelque chose comme: (Vous devez masquer les conditions de contrôle des cases inutiles)
=IIF(IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(Variables!PageCount.Value+1),"")
)
Vous devez masquer cette case lorsque NOT IsNothing(ReportItems!TotalBox.Value)
=IIF(NOT IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(0),"")
)
Encore une fois, vous devez masquer cette case lorsque IsNothing(ReportItems!TotalBox.Value)
Bien sûr, vous pouvez utiliser un autre moyen pour déterminer la fin d'une instance de groupe, comme par exemple: Créer une zone de texte contenant UNIQUEMENT une valeur fixe à la fin de la table de groupe. et le cacher. Lorsque vous vérifiez le déclencheur, faites la même approche que moi.
Cela fonctionne très bien pour toutes les versions supérieures à 2008 R2 (inclus).
Dans Visual Studio 2013
Report variables
sera Visible
sous le menu Rapport.
Dans le menu principal - Rapport > RapportProperties > Variables > Ajouter
Suivez d'abord les étapes 1 ci-dessous pour faire pagination :
1)
1.1. Cliquez sur le groupe Détails dans le volet Groupes de lignes.
1.2. Dans le volet Propriétés du membre de tableau matriciel, développez «Groupe» -> «PageBreak».
1.3. Définissez “BreakLocation” sur “End” et définissez la propriété “Disable” sur l'expression suivante:
=IIF(rownumber(nothing) mod 40=0,false,true)
Le point 1 ci-dessus est utilisé pour faire la pagination dans la sortie du rapport (affiche seulement 40 enregistrements par page dans la sortie)
2) utilisez un code personnalisé:
Public Function PageNumberno(val as integer) as String
Dim str as String
str =(val/40)
Return str
End Function
3) Créer une colonne calculée dans le jeu de données et entrer =0
dans l'expression
4) Dans 2 colonnes calculées
1) Pageno
2) Non
dans le jeu de données
Dans Report Body use Expression for PageNo :
=code.PageNumberno(Rownumber("DataSet1"))
utiliser Expression pour Non :
=IIF(Instr(code.PageNumberno(Rownumber("DataSet1"))
,".")<>0,
(Left(code.PageNumberno(Rownumber("DataSet1")),
(Instr(code.PageNumberno(Rownumber("DataSet1")),".")-1))+1)
,code.PageNumberno(Rownumber("DataSet1"))
)
5) Faites un clic droit et insérez une colonne à droite et dans Nom de colonne, ajoutez un code dans la zone de texte
=ReportItems!No.Value
Remarque: Non correspond au nom de la colonne de champ calculé.
6) Sous AdvancedMode IN Row Group, sélectionnez Static et Set RepeatOnNewPage Properties to True
.
Dans la colonne ci-dessus créée au point 5, le numéro de page correct sera affiché dans toutes les pages du corps du rapport.
J'ai essayé et son travail va bien .. Essayez-le.
Si vous utilisez le Générateur de rapports SQL Server 2016, cette expression a fonctionné avec moi.
=Globals!PageNumber.ToString() +"/" + Globals!TotalPages.ToString()