2010-07-02 28 views
9

¿Es posible escribir métodos de extensión para expresiones detrás de campos RDLC?Métodos de extensión de expresión RDLC

Por ejemplo, supongamos que tengo un campo DateTime en mi fuente de datos que puede tener un valor válido o ser nulo. Arrastro y solté un TextBox en mi RDLC y formateé su valor usando el método ToShortDateString(). Esto funciona bien para el valor DateTime poblado, pero obviamente también arrojará una excepción en el tiempo de ejecución si intento hacer un .ToShortDateString() en un campo NULL.

Me preguntaba si podría escribir un método de extensión que podría usar en mis expresiones RDLC para que cuando estoy tratando con los valores de DateTime, pueda llamar a un método como .ConvertFromNullToEmptyString().

Por supuesto, hay otras maneras de evitar este problema, pero me preguntaba si los métodos de extensión para su uso en expresiones RDLC serían un posible enfoque para mi problema comercial.

Gracias amigos!

+1

+1: Buena pregunta. Creo que sí, pero nunca tuve tiempo de averiguarlo. ¡Espero que alguien responda! – AMissico

+0

Supongo que esto simplemente no es posible; Qué lástima, estaba esperando recompensar una recompensa basada en una respuesta concluyente aquí. – DanP

+0

está usando ssrs, o el control de visor de informes asp.net. Pregunto porque un archivo RDL es un archivo de idioma de definición de informe ssrs, mientras que un RDLC es un archivo de idioma de cliente de definición de informe, que es utilizado por asp.net para mostrar un informe, sans ssrs – CodeMonkey1313

Respuesta

2

Sí, esto es posible. Puede embed code directly en el informe o incluir un custom assembly.

+0

. Estos no son ejemplos de métodos de extensión. que es lo que la pregunta está haciendo ... – DanP

+0

@DanP: aunque esto no agrega métodos de extensión, llamar al código se hace de la misma manera que las expresiones normales. – CodeMonkey1313

0

Aunque estoy de acuerdo con Corina en la solución a la pregunta, creo que se puede llegar a una solución mejor sin seguir la ruta que sugiere, utilizando expresiones incorporadas. En cualquier caso en que tenga un DateTime proveniente de SQL, está en lo correcto, puede ser nulo, sin embargo, puede probarlo fácilmente usando una declaración IIF (recuerde que las expresiones están básicamente en VB) para verificar null/nothing/empty y mientras sea algo, ejecute la operación deseada; de lo contrario, devuelva el espacio en blanco. Solo tenga cuidado, ya que el tipo resultante de IIF probablemente será una cadena.

+1

Aunque no puedo dar rienda suelta al OP o AMissico; Personalmente estoy interesado en los métodos de extensión específicamente. Ya es muy conocido cómo usar código personalizado arbitrario en un informe, por lo que las respuestas a lo largo de esas líneas son un tanto inútiles ... – DanP

+0

Uno de los desafíos con lo que estás preguntando es que la reflexión probablemente se esté utilizando para ejecutar el método, entonces, si llama a .ConvertFromNullToEmptyString() en el objeto nulo (datetime nulo), obtendrá una excepción de referencia nula independientemente, a menos que haya reescrito el DateTime? objete tener un método estático llamado ConvertFromNullToEmptyString que proporcione la funcionalidad que está solicitando.Por el momento, no veo cómo esta particular funcionalidad te beneficia más que un código personalizado. – CodeMonkey1313

2

Es posible utilizar métodos de extensión, pero no métodos de extensión AS en una instancia de un objeto. Tendría que llamarlos como una llamada de método estático en el tipo de los que son miembros. Así que en lugar de myDictionary.Values.Sum() - llamando al método Sum en la propiedad de una instancia de Values diccionario - se puede utilizar System.Linq.Enumerable.Sum(myDictionary.Values) - pasando la instancia en el Sum método estático del tipo Enumerable (en este ejemplo, el informe debe hacer referencia al ensamblado System.Core) Entonces, sí, puedes usar métodos que también son extensiones, pero (parece que de todos modos) no como extensiones en una instancia particular.

Cuestiones relacionadas