L'une des nombreuses bizarreries de Reporting Services que nous avons rencontrées est l'absence totale et totale de contrôle CheckBox ou même quelque chose de similaire.
Nous avons un formulaire qui devrait apparaître automatiquement rempli à partir d'informations extraites d'une base de données. Nous avons plusieurs champs de type de données bit. Imprimer "Vrai" ou "Faux" semble ridicule, car cela est censé ressembler à un formulaire rempli automatiquement. Nous souhaitons donc avoir une série de cases à cocher et d’étiquettes cochées ou non.
Nous exécutons SSRS 2005, mais je ne suis pas au courant que SSRS 2008 ait ajouté un contrôle CheckBox. Même si c'était le cas, nous aurions besoin d'une alternative pour le moment. Le meilleur que nous ayons trouvé jusqu'ici est:
Les trois approches requièrent des manipulations à l'expression IIF
.
L’approche Wingdings semblait fonctionner de manière acceptable et était la plus esthétique, sauf que, pour une raison quelconque, elle n’imprimait pas toujours correctement. Plus important encore, les PDF exportations, y compris pour une raison quelconque, ont converti toutes les polices (généralement) en Arial.
Les images, en tant que raster à base de pixels, ne sont pas aussi performantes lorsqu'elles sont imprimées parallèlement à des éléments vectoriels tels que du texte. À moins d'être manipulés avec soin, ils ont tendance à s'étirer, à pixeliser et à faire d'autres choses qui ne sont pas professionnelles.
Bien que ces méthodes fonctionnent (certaines avec les limitations mentionnées ci-dessus), aucune d’elles n’est particulièrement élégante.
Il nous manque quelque chose d'évident? Pas si évident? Quelqu'un chez Microsoft a-t-il une bonne raison pour laquelle un tel contrôle n'a pas été fourni dans SSRS 2000, sans parler de 2 versions et 8 ans plus tard? Cela ne peut pas être la première fois que ce problème se pose ...
Avec d'autres utilisateurs de ma boutique, j'ai utilisé des images pour basculer l'attribut masqué en fonction de la valeur du champ (true ou false). Nous n’avons eu aucun problème de flou ou de mise à l’échelle, à moins d’essayer évidemment d’augmenter l’échelle de l’image au-delà de 100%.
Une autre option que j'ai utilisée est similaire à l'idée de wingdings, mais j'utilise simplement un vieux "X". Au moins sur nos formulaires, il n'est pas rare que quelqu'un utilise un X dans une case au lieu d'une coche, de sorte que cela semble tout à fait acceptable. De plus, vous n'avez pas à vous soucier des caractères étranges lors de l'impression.
Pour ce qui est de savoir pourquoi Microsoft n'inclut pas de case à cocher, je ne peux pas répondre à cette question car je me suis moi-même demandé la même chose depuis longtemps.
Ce que j'ai utilisé pour afficher une case à cocher (ou une urne):
1- créer une zone de texte (qui deviendra votre case à cocher)
2- changer la police en Arial Unicode MS
3- dans la fenêtre d'expression, utilisez:
ChrW (& H2611) pour une case à cocher remplie
ChrW (& H2610) pour une case à cocher vide
Outre les différentes méthodes déjà présentées, à partir de SQL Server 2008 R2, il existe un contrôle intégré qui peut être utilisé pour une fonctionnalité identique à celle d'une case à cocher: l'indicateur Indicator!
Jetez un coup d'œil ici pour savoir comment l'utiliser: http://blog.hoegaerden.be/2012/08/04/displaying-checkboxes-in-an-ssrs-report/
Pour pouvoir utiliser un champ de type bit, vous devez d'abord le convertir en int. Cela peut être fait soit dans la requête du jeu de données, soit en ajoutant un champ calculé au jeu de données.
Si vous souhaitez que les valeurs NULL apparaissent en jaune, vous devez alors construire l'expression de manière à ce qu'elle prenne également en compte cette exigence.
Voici une expression possible pour un champ calculé:
=Switch(
IsNothing(Fields!YourBoolean.Value), 50,
Fields!YourBoolean.Value = False, 0,
Fields!YourBoolean.Value = True, 100)
Selon la signification de vos champs (faux ou mauvais), vous devrez peut-être échanger le zéro et le 100.
Je veux juste partager l'idée sur ce blog. SSRS: Comment afficher une case à cocher dans un rapport
Insérez une expression dans la zone de texte et écrivez cette expression.
=IIF(Fields!Active.Value,chr(254),"o")
Fields! Active.Value peut être n'importe quel élément de votre requête qui doit renvoyer une valeur booléenne 1 ou 0.
Cliquez ensuite sur Aperçu et cochez la case;)
Plus de styles peuvent être sélectionnés sur le blog que j'ai partagé ci-dessus.
Vous pouvez également utiliser un champ calculé comme "[X]" ou "[]". C'est moins joli que la zone de texte avec une bordure mais vous n'avez pas à mettre un contrôle spécifique pour la valeur et vous pouvez remplir un tableau ou une matrice avec ceci.
Au moins, il y a une solution pour la case à cocher. Je cherche toujours une justification complète de mon texte (en fait, je cherche une autre solution que celle du SSRS).
ACCESS 97 pourrait faire ce genre de chose mais pas SQL SERVER 2012.
Je pense qu'il y a un bogue avec SSRS et l'incorporation de caractères de police supérieurs à 128 (quelque chose à faire avec le codage ANSI). Fondamentalement, vous pouvez utiliser 1 à 128 amende, le reste apparaît sous forme de grands blocs rectangulaires.
J'aime l'idée de NY de la zone de texte avec une bordure et un X facultatif - cela semble simple et efficace.
Une autre façon de le faire est d'aller dans "Propriétés de marque de réservation" de TextBox et de vérifier Html - Interpret HTML tag as styles
Puis dans la Value
- Expression
, mettez cette ligne de code pour cocher:
="<font face=""Wingdings 2"" color=""green"">" & Chr(81) &"</font>" & "some other text"
Ou cet exemple de code pour décoché:
="<font face=""Wingdings 2"" color=""red"">" & Chr(163) &"</font>" & "some other text"
De cette façon, vous pouvez avoir une case à cocher et du texte dans la même zone de texte.
Later edit:
Si vous ne parvenez pas à afficher Wingdings 2
sur Azure, utilisez Wingdings
.
Apparemment ça marche.
="<font face=""Wingdings"" color=""green"">" & Chr(253) &"</font>" & "some other text"
Ou cet exemple de code pour décoché:
="<font face=""Wingdings"" color=""red"">" & Chr(168) &"</font>" & "some other text"