9
votes

Méthodes d'extension d'expression RDLC

est-il possible d'écrire des méthodes d'extension pour des expressions derrière des champs RDLC?

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.

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 ().

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.

Merci aux personnes!


3 commentaires

+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


4 Réponses :


2
votes

Oui, c'est possible. Vous pouvez soit Incorporer directement dans le rapport ou inclure un Assemblage personnalisé .


2 commentaires

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.



0
votes

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 (rappelez-vous que les expressions sont essentiellement dans VB ) Pour rechercher null / rien / vide 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 sera probablement une chaîne.


3 commentaires

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 () opérateur ternaire au lieu de la fonction iif () .



2
votes

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 () - appeler la méthode Somme sur les valeurs Propriété d'une instance de dictionnaire - Vous pouvez utiliser system.linq.enumerable.sum (mydicary.values) - Passer l'instance dans la méthode statique Somme du type énumérable (dans cette Exemple, le rapport doit faire référence à l'assemblage system.core ). 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.


0 commentaires

0
votes

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")

0 commentaires