est-il possible d'écrire des méthodes d'extension pour des expressions derrière des champs RDLC? P>
Par exemple, disons que j'ai un champ DateTime dans mon DataSource qui peut avoir une valeur valide ou peut être null. Je traîne et déposez une zone de texte sur mon RDLC et formatez sa valeur à l'aide de la méthode ThoTorDateString (). Cela fonctionne correctement pour une valeur de DateTime peuplée, mais cela jettera évidemment une exception à l'exécution si j'essaie de faire une .toshortdateString () sur un champ NULL. P>
Je me demandais si je pouvais écrire une méthode d'extension que je pourrais utiliser dans mes expressions RDLC afin que je traite de faire face à? Valeurs DateTime, je pourrais appeler une méthode comme .ConvertFromnullToPtyString (). P>
Bien sûr, il existe d'autres moyens de contourner ce problème, mais je me demandais si des méthodes d'extension d'utilisation dans les expressions RDLC seraient une approche possible de mon problème commercial. P>
Merci aux personnes! p>
4 Réponses :
Oui, c'est possible. Vous pouvez soit Incorporer directement dans le rapport ou inclure un Assemblage personnalisé . p>
Ce ne sont pas des exemples d'utilisation des méthodes d'extension - ce que la question pose la question ...
@DANP: Bien que cela n'ajoutez pas de méthodes d'extension, appeler le code est le fait de la même manière que les expressions normales.
Pendant que je suis d'accord avec Corina sur la solution à la question, je crois qu'une meilleure solution peut être atteinte sans aller à l'itinéraire qu'elle suggère, en utilisant des expressions intégrées. Dans tous les cas où vous avez une date d'heure provenant de SQL, vous êtes correct, il peut être null, cependant, vous pouvez facilement tester cela à l'aide d'une instruction iif code> (rappelez-vous que les expressions sont essentiellement dans VB ) Pour rechercher
null code> /
rien code> /
vide code> et aussi longtemps que c'est quelque chose, exécutez l'opération souhaitée, sinon revenez en blanc. Soyez juste prudent, comme le type résultant du
iif code> sera probablement une chaîne. P>
Bien que je ne puisse pas ressusciter pour l'OP ou l'Amissico; Je suis personnellement intéressé par les méthodes de vulgarisation spécifiquement. Il est déjà très connu comment utiliser le code personnalisé arbitraire dans un rapport - afin que les réponses suivent ces lignes sont un peu inutiles ...
L'un des défis avec ce que vous demandez est que la réflexion est probablement utilisée pour exécuter la méthode, donc si vous appelez .ConvertfromnullTyTyString () sur l'objet NULL (NULL DateTime), vous obtiendrez une exception de référence nulle, à moins que Vous avez réécrit la dateTime? Objet d'avoir une méthode statique appelée ConvertFromnulltoemptyString qui fournirait les fonctionnalités que vous demandez. Pour le moment, je ne vois pas comment cette pièce de fonctionnalité particulière vous profiterait plus d'un code personnalisé.
@ Codemonkey1313 Je viens de poster une réponse couvrant ce problème. Il utilise le si () code> opérateur ternaire au lieu de la fonction
iif () code>.
Il est possible d'utiliser des méthodes d'extension, mais pas comme des méthodes d'extension sur une instance d'un objet. Vous devriez les appeler comme une méthode statique sur le type dont ils sont membres. Donc au lieu de mydicicary.values.sum () code> - appeler la méthode code> Somme code> sur les valeurs code> code> Propriété d'une instance de dictionnaire - Vous pouvez utiliser
system.linq.enumerable.sum (mydicary.values) code> - Passer l'instance dans la méthode statique
Somme code> du type code> énumérable code> (dans cette Exemple, le rapport doit faire référence à l'assemblage code> system.core code>). Donc, oui, vous pouvez utiliser des méthodes qui sont également des extensions, mais elles apparaissent de toute façon) pas comme des extensions sur une instance particulière. P>
Par exemple, disons que j'ai un champ DateTime dans mon DataSource qui peut avoir une valeur valide ou peut être null. Je traîne et déposez une zone de texte sur mon RDLC et formatez sa valeur à l'aide de la méthode ThoTorDateString (). Cela fonctionne correctement pour une valeur de DateTime peuplée, mais cela jettera évidemment une exception à l'exécution si j'essaie de faire une .toshortdateString () sur un champ NULL. P>
Il ne devrait pas y avoir de besoin pour une fonction personnalisée dans votre cas. Il suffit d'utiliser VB's
si ( ) code> opérateur ternaire
: p>=If(Fields!MyDate.Value IsNot Nothing, Fields!MyDate.Value.ToShortDateString(), "N/A")
+1: bonne question. Je crois que cela n'a jamais eu le temps de comprendre. J'espère que quelqu'un répond!
Je suppose que cela n'est tout simplement pas possible; Dommage - j'avais hâte de récompenser une génération basée sur une réponse concluante ici.
Utilisez-vous les SSRS ou le contrôle de la visionneuse de rapport ASP.NET. Je vous demande car un fichier RDL est un fichier de langue de définition de rapport SSRS, tandis qu'un RDLC est un fichier de langue du client de définition de rapport, utilisé par ASP.NET pour afficher un rapport, SANS SSRS