Ist es möglich, Erweiterungsmethoden für Ausdrücke hinter RDLC-Feldern zu schreiben?
Nehmen wir zum Beispiel an, dass ich ein DateTime-Feld in meiner Datenquelle habe, das entweder einen gültigen Wert haben oder null sein kann. Ich ziehe eine TextBox auf meine RDLC und formatiere ihren Wert mit der ToShortDateString () -Methode. Das funktioniert gut für den befüllten DateTime-Wert, aber dies wird natürlich auch eine Ausnahme zur Laufzeit auslösen, wenn ich versuche, ein .ToShortDateString () für ein NULL-Feld auszuführen.
Ich habe mich gefragt, ob ich eine Erweiterungsmethode schreiben könnte, die ich in meinen RDLC-Ausdrücken verwenden könnte, damit ich, wenn ich mit DateTime-Werten arbeite, eine Methode wie .ConvertFromNullToEmptyString ().
aufrufen könnteNatürlich gibt es andere Möglichkeiten, dieses Problem zu umgehen, aber ich frage mich, ob Erweiterungsmethoden für die Verwendung in RDLC-Ausdrücken ein möglicher Ansatz für mein Geschäftsproblem sein könnten.
Danke Leute!
Ja, das ist möglich. Sie können entweder Code direkt in den Bericht einbetten benutzerdefinierte Assembly .
Es ist möglich, Erweiterungsmethoden, aber keine AS-Erweiterungsmethoden für eine Instanz eines Objekts zu verwenden. Sie müssten sie als statischen Methodenaufruf für den Typ benennen, zu dem sie gehören. Anstelle von myDictionary.Values.Sum()
- Aufruf der Methode Sum
für die Eigenschaft Values
einer Wörterbuchinstanz - könnten Sie System.Linq.Enumerable.Sum(myDictionary.Values)
verwenden und die Instanz in die statische Methode Sum
des Typs Enumerable
übergeben (In diesem Beispiel muss der Bericht auf die Assembly System.Core
verweisen). Also ja, Sie können Methoden verwenden, die auch Erweiterungen sind, aber (es erscheint sowieso) nicht als Erweiterungen für eine bestimmte Instanz.
Obwohl ich Corina bei der Lösung der Frage zustimme, glaube ich, dass eine bessere Lösung erreicht werden kann, ohne den von ihr vorgeschlagenen Weg einzuschlagen, indem er eingebaute Ausdrücke verwendet. In jedem Fall, wo Sie eine DateTime von SQL haben, sind Sie richtig, es kann Null sein, aber Sie können dies leicht mit einer IIF
-Anweisung testen (denken Sie daran, dass die Ausdrücke im Grunde in VB sind), um nach% zu suchen co_de% / null
/ nothing
und solange es etwas ist, führe die gewünschte Operation aus, andernfalls gib es zurück. Seien Sie vorsichtig, da der resultierende Typ von empty
wahrscheinlich eine Zeichenfolge ist.
Tags und Links expression reporting-services rdlc ssrs-expression