Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre éclairé
    [SSRS][2k5]Coloration des lignes alternativement
    Bonjour,

    Je voudrais colorer mes lignes alternativement, histoire de faciliter la lecteur du rapport (qui fait quand meme 70 cm de large donc ca peut aider).

    J'ai donc mis dans le background de ma ligne :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    =iif(RowNumber(Nothing) Mod 2,"LightSteelBlue","White")


    Mais voila, mes utilisateurs arrivent sur le rapport avec déjà un pays de sélectionner dans une liste. Ce parametre influe sur le dataset. Je me suis rendu compte que le RowNumber numérotait toutes les lignes du dataset, tout pays confondus donc ca donne un résultat pas terrible.
    J'ai essayé de varier les scopes (nothing, dataset, tableau, groupe du tableau) mais ca donne toujours un truc irregulier. Donc si vous avez des idées.

    2nd probleme du meme ordre, mon tableau comporte aussi des filtres sur le tableau lui-meme, donc meme problematique dans le cas d'un tableau filtré.

    Et un dernier pour la route, meme problématique pour colorer les lignes d'un meme projet. Un projet peut avec 1 à x lignes qui se suivent et ce serait pas mal que les lignes d'un meme projet soient de la meme couleur. Les projets sont identifiés par une clé unique ou un numéro de projet unique (en théorie celui-la car venant d'un autre systeme).

    J'ai passé pas mal de temps a regarder et pour le moment, tout ce que je vois c'est une succession de iif mod 2, 3, 4... pour mettre plein de couleurs qu'au moins 2 lignes successives n'aient pas la meme couleur.

    Donc merci d'avance pour vos idées et suggestions.

  2. #2
    Modérateur

    Bonjour,

    Je ne suis pas très vieux sur SSRS et j'ai eu ce petit problème hier. J'ai "triché" en ajoutant à mon DataSet les ID de la table, et j'ai utilisé comme toi le Mod2 pour colorer les lignes.
    Par contre pour gérer l'alternance de la couleur dans les sous-ensembles, là ...
    Je regarderai ça Lundi et je te tiens au courant si j'ai trouvé quelque chose

  3. #3
    Membre éclairé
    Un petit up car j'ai trouvé des infos pas mal pour la coloration des lignes :
    http://www.microsoft.com/technet/prodtechnol/sql/2005/technologies/rch7rptslnpatternrecipes.mspx

    Ca passe par du code et ca marche. Maintenant, ne serait-il pas possible de modifier le code pour qu'il colore les lignes par groupe.

    Exemple :
    J'ai 5 lignes :
    1
    2
    3
    3
    4

    "1" et les 2 "3" devraient avoir la meme couleurs et "2" et "4" en blanc par exemple (les couleurs importent peu).

    Je met le code à ajouter dans le rapport des fois que quelqu'un à qui c aparle passe par là (j'ai essayé, ca a pas l'air compliqué mais j'y connais vraiment rien):

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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


    Et dans le background des lignes :
    =Code.AlternateColor("AliceBlue", "White", True) pour la 1ere colonne

    et
    =Code.AlternateColor("AliceBlue", "White", False) pour toutes les autres

  4. #4
    Membre éclairé
    Bon bah trouvé héhé (non sans mal)

    Alors le code :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Private bOddRow As Boolean, n As Integer
     
    Function AlternateColor(ByVal OddColor As String, _
             ByVal EvenColor As String, ByVal Toggle As Boolean, ByVal projno As String) As String
    'on inverse la couleur de base a chaque ligne
    bOddRow = Not bOddRow 
     
    'si le n° de projet est le meme qu'a la ligne précédente, on réinverse la couleur
    If projno = n then bOddRow = Not bOddRow
     
    'n prend la valeur du n° de projet de la ligne
    n = projno
     
    'En fonction de bOddRow, on renvoie la couleur
    If bOddRow Then
            Return OddColor
        Else
            Return EvenColor
        End If
    End Function


    A mettre dans le code du rapport (click droit, propriétés puis code).

    Ensuite, l'appel de la fonction :
    =Code.AlternateColor("LightGrey", "White", True, Fields!Project_Number.Value) pour la 1ere colonne
    et
    =Code.AlternateColor("LightGrey", "White", False, Fields!Project_Number.Value) pour les autres

    Dans mon cas, le tri est fait sur le Project_number et c'est la valeur qui sert pour regrouper les lignes et donc les couleurs. Après on peut modifier à volonté. Par exemple, en inversant les True et False des appel de fonction, ca va colorer une colonne sur deux et non les lignes, on peut aussi faire un damier etc...

  5. #5
    Membre actif
    Salut,

    merci c'est justement ce que je cherchais !

    @+

###raw>template_hook.ano_emploi###