2011-03-28 30 views
15

Estoy utilizando las capacidades de informes del lado del cliente que se incluyen con Visual Studio 2010. Tengo un archivo RDLC definido, actualmente con imágenes incrustadas para fines de desarrollo de marca en la parte superior del informe. La imagen es el logotipo de la empresa del usuario. No tiene nada que ver con los datos del informe ... es solo un título.Estableciendo el origen de la imagen en el informe RDLC dinámicamente

Me gustaría poder romper la dependencia de incrustar las imágenes, ya que estoy empezando a tener que escalar la aplicación. En cambio, me gustaría poder configurar dinámicamente la imagen. Lamentablemente, no hay ningún tipo de parámetro que parezca apoyar esto.

He visto cambiar la fuente de incrustado a externo, y tal vez emitir un archivo de imagen del logotipo al iniciar el programa (los logotipos están incrustados como recursos en un ensamblaje separado), y luego referirme a él como un genérico- archivo nombrado para la fuente. No estoy seguro de cuánto me gusta esta opción, ya que parece un truco. También recibo un error cuando pruebo explícitamente imágenes de ruta, diciendo efectivamente que el objeto no está configurado para una instancia. Por ejemplo, incluso he intentado configurarlo en D: \ test.jpg, y obtuve ese error en el momento del diseño ... por lo que soy más reacio a probar esta opción.

También he buscado llamar a una clase en un ensamblado al que se hace referencia desde el archivo RDLC, pero parece que no puedo hacerlo funcionar. Parece que puedo hacer referencia a un ensamblaje y luego llamar a través de un objeto especial llamado Código. Como mi clase es estática, debería ser Code.className.method, pero parece que no funciona.

También he considerado romper el título en un subinforme, pero todavía no creo que haya resuelto mi problema de dependencia. Todavía requeriría la misma cantidad de mantenimiento.

Debo mencionar que estoy usando objetos como fuente de datos. ¿Con qué opción debería ir? ¿Me estoy perdiendo algo obvio?

Respuesta

19

Como no hay opiniones alternativas (¡ni ninguna!) Sobre el tema, he avanzado más y he encontrado una solución funcional.

Estoy optando por crear un archivo a pedido del logotipo, almacenándolo en una ubicación temporal. Si el archivo no existe, lo estoy creando sobre la marcha. Si existe, solo estoy haciendo referencia a la imagen que sí existe.

En el informe RDLC, he creado un parámetro llamado Ruta de tipo Texto. A continuación, en las propiedades de la imagen, modifiqué la imagen del logotipo de incrustado a externo y configuré "Usar esta imagen" como parámetro: [@Path].

Luego, en el código que paso en la ruta del archivo como el parámetro Ruta. Pero donde me había equivocado anteriormente es que la ruta tiene que ser una URL y he estado tratando de pasar la ubicación en el disco. Entonces, esa porción debería verse así:

Diré que la documentación de MSDN podría ser un poco mejor. Para su crédito, hay muchos documentos detallados sobre cómo lograr algo en un nivel superior. Este article ayudó. Claramente dice que necesitaba una URL para la ruta, pero hubiera sido más fácil examinar esa propiedad directamente en la biblioteca. Sin embargo, encontrar la documentación de nivel inferior fue más difícil y menos fructífera. Aquí está el article para el objeto de Informes. No hay muchas oportunidades para establecer propiedades de interés.

+1

+1 Gracias por responder a su propia pregunta de forma clara y exhaustiva, he utilizado su enfoque y funciona como un encanto. Y esta es un área donde puede ser difícil obtener buena información. – Carl

+1

No funciona para mí. El uso de report.Render para imprimir directamente no muestra la imagen. – dave

+2

Lo hice funcionar usando origen de imagen 'Base de datos' y tipo MIME image/png. Luego pasé la imagen como byte [] en uno de los campos de fuente de datos. – dave

8

Estaba teniendo el mismo problema, sin embargo, la solución aceptada no funcionó para mí. Resulta que necesitaba establecer EnableExternalImages en true, además de proporcionar la ruta en formato URI y establecer mi Image.Value en =Parameters!ReportLogo.Value.

report.EnableExternalImages = true; 
ReportParameter[] parameters = new ReportParameter[3]; 
... 
Uri pathAsUri = new Uri(_info.LogoPath); 
parameters[2] = new ReportParameter("ReportLogo", pathAsUri.AbsoluteUri); 
report.SetParameters(parameters); 
Cuestiones relacionadas