Comment ombrager des lignes alternées dans un rapport SQL Server Reporting Services ?
Editar: Il y a un tas de bonnes réponses listées ci-dessous - du rapide y simple a complexe et complet . Hélas, je ne peux en choisir qu'un seul...
Comment ombrager des lignes alternées dans un rapport SQL Server Reporting Services ?
Editar: Il y a un tas de bonnes réponses listées ci-dessous - du rapide y simple a complexe et complet . Hélas, je ne peux en choisir qu'un seul...
Allez dans la propriété BackgroundColor de la ligne du tableau et choisissez "Expression...".
Utilisez cette expression :
= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")
Cette astuce peut être appliquée à de nombreux domaines du rapport.
Et dans .NET 3.5+ vous pouvez utiliser :
= If(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")
Je ne cherche pas à me faire valoir, je me suis juste renseigné sur la question et j'ai pensé que je devais partager.
L'utilisation de IIF(RowNumber...) peut entraîner certains problèmes lorsque les lignes sont regroupées. Une autre solution consiste à utiliser une simple fonction VBScript pour déterminer la couleur.
Cela demande un peu plus d'efforts, mais lorsque la solution de base ne suffit pas, c'est une alternative intéressante.
En gros, vous ajoutez du code au rapport comme suit...
Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
Ensuite, sur chaque cellule, définissez la BackgroundColor comme suit :
=Code.AlternateColor("AliceBlue", "White", True)
Tous les détails sont sur ce site Article de Wrox
J'ai obtenu l'effet d'échecs lorsque j'ai utilisé la solution de Catch22, je pense que c'est parce que ma matrice a plus d'une colonne dans la conception. cette expression a bien fonctionné pour moi :
=iif(RunningValue(Fields![rowgroupfield].Value.ToString,CountDistinct,Nothing) Mod 2,"Gainsboro", "White")
J'ai un peu modifié la solution de @Catch22 car je n'aime pas l'idée de devoir aller dans chaque champ si je décide de changer une des couleurs. Ceci est particulièrement important dans les rapports où il y a de nombreux champs dont la variable couleur doit être modifiée.
Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor( ByVal Toggle As Boolean,Byval rowNumber as integer) As String
dim OddColor As String = "Green"
Dim EvenColor As String = "White"
if rowNumber mod 2 = 0 then
Return OddColor
Else
Return EvenColor
End If
End Function
J'ai remarqué que j'ai changé la fonction qui accepte les couleurs en une fonction qui contient les couleurs à utiliser.
Puis, dans chaque champ, ajoutez :
=Code.AlternateColor(True, rownumber(nothing))
C'est beaucoup plus robuste que de changer manuellement la couleur dans chaque champ backgroundcolor.
Une chose que j'ai remarquée, c'est qu'aucune des deux méthodes ci-dessus n'a la moindre idée de la couleur que doit avoir la première ligne d'un groupe ; le groupe commencera simplement par la couleur opposée à celle de la dernière ligne du groupe précédent. Je voulais que mes groupes commencent toujours avec la même couleur... la première ligne de chaque groupe devrait toujours être blanche, et la ligne suivante colorée.
Le concept de base était de réinitialiser la bascule lorsque chaque groupe commence, j'ai donc ajouté un peu de code :
Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
ByVal EvenColor As String, ByVal Toggle As Boolean) As String
If Toggle Then bOddRow = Not bOddRow
If bOddRow Then
Return OddColor
Else
Return EvenColor
End If
End Function
'
Function RestartColor(ByVal OddColor As String) As String
bOddRow = True
Return OddColor
End Function
J'ai donc trois types différents de fonds de cellule maintenant :
Cela fonctionne pour moi. Si vous souhaitez que la ligne de regroupement ne soit pas colorée, ou qu'elle soit d'une couleur différente, la façon de la modifier devrait être assez évidente.
N'hésitez pas à ajouter des commentaires sur ce qui pourrait être fait pour améliorer ce code : Je suis tout nouveau à la fois dans SSRS et dans VB, donc je soupçonne fortement qu'il y a beaucoup de place pour l'amélioration, mais l'idée de base semble saine (et elle m'a été utile) donc je voulais la présenter ici.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.