RDLC-Ausdruckserweiterungsmethoden

9

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önnte

Natü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!

    
michael.lukatchik 02.07.2010, 23:17
quelle

3 Antworten

2

Ja, das ist möglich. Sie können entweder Code direkt in den Bericht einbetten benutzerdefinierte Assembly .

    
Corina 19.09.2010 08:19
quelle
2

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.

    
Ryan999 29.02.2012 17:45
quelle
0

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.

    
CodeMonkey1313 21.09.2010 22:20
quelle