2011-02-11 32 views
6

¿Es posible usar System.Drawing.Image en un control RDLC Image? Todo lo que he estado leyendo eran 3 métodos:Cómo utilizar System.Drawing.Image en RDLC Image Control?

  • base de datos
  • recursos Embebido
  • archivo externo

, gracias, gracias.

EDIT: El seguimiento de esta .NET or C# library for CGM (Computer Graphics Metafile) format? ahora tengo la imagen en System.Drawing.Image formato y quiero mostrarlo como parte del informe (como una imagen) --- eso es lo que quiero hacer.

Respuesta

4

No estoy seguro si esto es lo que busca, pero si usted tiene una imagen en código y que desea mostrar en el informe, cree un objeto de contenedor que tiene una propiedad que devuelve la imagen como una matriz de bytes y proporciona una instancia de esta clase contenedora con la imagen válida en el informe como ReportDataSource.

Algo así como:

ReportDataSource logoDataSource = new ReportDataSource(); 
logoDataSource.Name = "LogoDS"; 
logoDataSource.Value = new List<LogoWrapper>() { yourLogoWrapper }; 
localReport.DataSources.Add(logoDS); 

En el informe que a continuación se puede la imagen como si fuera de la base de datos

=First(Fields!LogoByteArrayProperty.Value, "LogoDS") 

La envoltura se ve algo como:

class LogoWrapper{ 
    ... 
    public byte[] LogoByteArrayProperty{ 
     get{ 
     // Return here the image data 
     } 
    } 
} 

I usa esto bastante seguido Tiene la ventaja de que no tengo que agregar la imagen al archivo db ni agregarla como recurso de cada informe. Y, además, la aplicación puede decir qué imagen se debe utilizar. Tenga en cuenta que el formato de imagen dado debe conocerse desde el motor rdlc. La última pregunta sería cómo convertir un system.drawing.image en una matriz de bytes. Trabajo con WPF y, por lo tanto, no lo sé. Pero estoy seguro de que Google responderá a esta pregunta de manera muy confiable.

+0

Esto es interesante ... primero intentaré y volveré. Gracias. – Jake

+0

¡Gracias funcionó! Solo quiero agregar que parece que el control de imagen RDLC también acepta byte [] array como valor siempre que el tipo de mime del control esté configurado correctamente. Esta sería la cuarta manera de hacerlo. – Jake

+0

Gracias, acabas de resolver un problema que estaba teniendo – WraithNath

0


no estoy muy seguro de qué es lo que quiere hacer con esto, pero en general no es el control possible.Image es simplemente un contenedor de imagen en las opciones RDLC files.These 3 especificar la ubicación desde donde el control de la imagen toma la imagen que se mostrará desde la base de datos, recurso embebido o archivo externo. Si me das más información sobre lo que quieres lograr, puedo darte algún tipo de solución.
Best Regards,
IORDAN

+0

Hola Lordan, que acaba de editar mi post. ¡Es bastante sencillo, solo quiero usar la imagen como imagen! Entonces puedo generar dinámicamente imágenes para imprimir. – Jake

2

Puede utilizar la opción de fuente 'Base de datos' junto con los parámetros para establecer dinámicamente el origen de la imagen desde arrays de bytes.

código subyacente:

var param2 = new ReportParameter() 
       { 
        Name = "CompanyLogo", 
        Values = { Convert.ToBase64String(*ByteArrayImageObject*) } 
       }; 
       ReportViewer1.LocalReport.SetParameters(param2); 

rdlc del archivo:

1- Agregar texto Parámetros 'CompanyLogo' y 'MIMEType'

2- Establecer la propiedad valor de la imagen a =System.Convert.FromBase64String(Parameters!CompanyLogo.Value)

3- Establecer propiedad tipo MIME en

=Parameters!MIMEType.Value 

4- Uso 'Base de datos' Como Fuente

How can I render a PNG image (as a memory stream) onto a .NET ReportViewer report surface

+0

Hice todo lo que dijiste sin ningún efecto. ¿Qué podría estar pasando? –

Cuestiones relacionadas