none
Lignes vides dans ReportViewer RRS feed

  • Question

  • Bonjour tout le monde,

    Il est de coutume qu'une adresse postale soit formatée sur six lignes, mais la plupart du temps plusieurs sont vides. Aussi, à l'impression il est courant qu'on souhaite imprimer de façon jointive les lignes renseignées, on appelle ça supprimer les lignes vides.

    J'ai fait ça sur une page ASP.Net récemment, dans un Panel, en renseignant les zones de texte par code via une fonction qui ajoute <br /> à la chaîne d'entrée si elle n'est pas vide, et la laisse inchangée sinon.

    Mais dans un ReportViewer, ou plutôt dans l'état qu'il contient, il faut trouver une autre solution.

    J'ai fait attention de placer mes lignes de façon jointive dans l'état (ou le rapport si on se laisse influencer par l'homophonie avec l'Anglais), et pour chacune j'ai initialisé la propriété CanShrink à True. En valeur j'ai mis Trim(First( ... champ)).

    En lisant la doc je m'attends à ce que ça sorte de façon jointive les lignes qui contiennent du texte, mais que nenni, les lignes vides occupent le même espace que si elles ne l'étaient pas.

    Qu'y a-t-il que j'ai mal compris ?

    J'aurais bien essayé de mettre Null, mais il ne m'a pas semblé trouver ce mot-clé dans le générateur d'expressions.

    vendredi 24 janvier 2014 16:22

Réponses

  • Avant de traiter les évènements, je dirais que vous pouvez faire comme ça:

    Une seule cellule de Text pour l'adresse, avec CanShrink, et pour avancer a une nouvelle ligne quelque chose de type :

    = Fields!address1_line1.Value & iif (Fields!address1_line2.Value !="" , vbcrlf & Fields!address1_line2.Value, "")  

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    • Modifié Aurel Bera lundi 27 janvier 2014 09:58
    • Marqué comme réponse Gloops lundi 27 janvier 2014 12:39
    lundi 27 janvier 2014 09:57

Toutes les réponses

  • Bonjour

    Vous avez la possibilité de cacher/afficher une cellule ou une ligne du votre rapport. Vous devez utiliser une expression de type:

    =Iif(ReportItems!TextboxName.Value = "",TRUE,FALSE) pour cacher/afficher la cellule.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    lundi 27 janvier 2014 05:52
  • Bonjour,

    J'ai bien essayé de mettre hidden = true, quitte à faire le détail plus tard : le contrôle n'est pas visible, mais celui du dessous est toujours à la même place.

    J'aurais bien mis le tout dans un contenant ayant lui-même l'attribut CanSchrink, mais il semble que ce soit réservé au TextBox, et qu'on ne puisse pas imbriquer de TextBox.

    Ce n'est d'ailleurs pas évident de trouver les contrôles par l'événement ReportViewer.PreRender : le sender a 8 contrôles nommés ctl01 à ctl08, et FindControl("Address3") ne trouve rien que ce soit sur sender ou sur l'un des 8 contrôles enfants. Je n'ai pas encore déclenché la trace pour visualiser la structure ...

    lundi 27 janvier 2014 07:58
  • Avant de traiter les évènements, je dirais que vous pouvez faire comme ça:

    Une seule cellule de Text pour l'adresse, avec CanShrink, et pour avancer a une nouvelle ligne quelque chose de type :

    = Fields!address1_line1.Value & iif (Fields!address1_line2.Value !="" , vbcrlf & Fields!address1_line2.Value, "")  

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    • Modifié Aurel Bera lundi 27 janvier 2014 09:58
    • Marqué comme réponse Gloops lundi 27 janvier 2014 12:39
    lundi 27 janvier 2014 09:57
  • J'ai essayé de tout mettre dans la même dans le même contrôle, pour les sauts de ligne j'ai essayé de mettre aussi bien "<br />" que "\n", mais ni l'un ni l'autre n'est interprété, ils apparaissent tels quels, et à ce qu'il me semble avoir lu quelque part c'est pour raison de sécurité.

    Ou il y a quelque chose que j'ai manqué ?



    • Modifié Gloops lundi 27 janvier 2014 12:40
    lundi 27 janvier 2014 11:36
  • Les SSRS utilise VB. Le "\n" viens du monde C, C++, C#.
    Donc veuillez essayer avec la constante vbcrlf.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 27 janvier 2014 11:52
  • Ah oui c'est dommage que j'aie vu votre réponse à l'heure du repas, je viens d'essayer vbCrLf, effectivement ça marche.

    Pour écrire une fonction à utiliser dans ce contexte il y a des choses à assimiler avant, je ne me rends pas bien compte du temps à y passer. Sinon tant pis j'écrirai chaque champ deux fois.

    Merci.

    lundi 27 janvier 2014 12:39