2008-09-24 101 views

Respuesta

7

En el trabajo hacemos esto presionando la imagen (s) en el informe como campos de una tabla de datos. No es bonito, pero hace el trabajo bien. Por supuesto, esta solución requiere que inserte datos en los informes a través de un DataSet. Siempre sentí que esto era un truco en el mejor de los casos. Realmente me gustaría que los parámetros de imagen fueran una posibilidad con CR.

Edit: Vale la pena señalar, si está vinculando su informe de cristal a objetos antiguos simples que desea exponer una propiedad de byte [] para el informe para tratar eso como una imagen.

+0

Estoy usando una clase C# por www.aspfree.com/c/a/C-Sharp/Crystal-Reports-for-Visual-Studio-2005-in-CSharp/. Tengo un informe elaborado elaborado a medida con cientos de campos. No veo un buen camino de aquí para allá. Miré: codeguru.com/csharp/.net/net_general/toolsand3rdparty/article.php/c13253. –

+0

Si está vinculando un Informe de Crystal a objetos antiguos simples, solo exponga una propiedad de byte []. CR lo verá como una imagen. –

+0

Eureka! Probé una propiedad de "Mapa de bits", pero no me crucé con el truco CR de byte [] en la lectura que hice. –

1

Trate de usar una combinación de la utilización de un parámetro que contiene la ruta de la imagen y el tutorial en esta página: http://www.idautomation.com/crystal/streaming_crystal.html

Luego, en el paso # 8, utilizar el parámetro en lugar de una ruta no modificable.

+0

Gracias pero esta solución es de una versión más reciente de cristal que estamos utilizando. No tenemos el botón de Ubicación gráfica en las propiedades de control de imagen. – Keith

+0

sí, esto solo funcionaría en CR 11 en adelante. – dotjoe

+0

A diferencia del otro @Keith: estoy usando CR 11.5 y esa ruta aún no funciona. La imagen nunca cambia del original. – Keith

2

¡También tuve esta pregunta (y voté la suya)!

[Desde entonces, he encontrado una solución usando una matriz de bytes a través de una propiedad de objeto C# - vea la respuesta separada. Dejando esta respuesta aquí para referencia ...]

Esto es lo que he visto sugerido (pero lo intenté y fallé tanto en C# -2005 como en C# -2008).

  1. Elija un directorio y coloque un BMP allí (por ejemplo, "C: \ Temp \ image.bmp").
  2. Desde CR-Designer a) Haga clic con el botón derecho en> Insertar> Objeto OLE ... b) Seleccione "Crear desde archivo" c) Marque la casilla de verificación "Enlace" d) Examine y seleccione el bmp definido en el paso 1 e) Haga clic en Aceptar f) Coloque la imagen en el formulario.
  3. Sobrescribe/actualiza la imagen en tiempo de ejecución en tu código C#. En teoría, desde que insertó un Enlace en un archivo de imagen, se actualizará cuando se actualice el formulario.

No tuve suerte con este enfoque. La imagen aparece cuando diseño por primera vez el formulario (paso 2). Pero en el tiempo de ejecución, la imagen no se actualiza para mí. A partir de este punto, las cosas se ponen realmente raras. Parece que CR almacena en caché algún tipo de imagen que simplemente no desaparecerá. Puedo eliminar el enlace de objeto OLE en CR-Designer, pero si lo vuelvo a crear, siempre obtengo un cuadro negro del mismo tamaño que la imagen original (incluso si cambio el tamaño de image.bmp).

+0

no estoy seguro de qué hace la opción "enlace". Siempre pensé que la inserción integraría la imagen en el informe. – dotjoe

+0

Según la ayuda de "Qué es esto" para esa casilla de verificación, es una opción insertar la imagen o vincularla. Supongo que es análogo a un "acceso directo" de Windows a un archivo (o un enlace del sistema de archivos en Unix). Si no está incrustando la imagen, seguramente parece que debería funcionar. –

+0

Lo mismo falla en VB.NET VS 2010, @ e-holder: la imagen original siempre permanece. – Keith

0

Al igual que Josh dijo .. Tendrá que empujar la imagen con un conjunto de datos. O bien, coloque la imagen en una tabla de base de datos una vez y tire de ella varias veces con un subinforme.

2

Finalmente llegué a una solución usando el consejo byte[] publicado aquí por Josh.

Esta solución se aplica si está utilizando un antiguo objeto C# simple para rellenar sus Crystal Reports (consulte http://www.aspfree.com/c/a/C-Sharp/Crystal-Reports-for-Visual-Studio-2005-in-CSharp/ para obtener información sobre este enfoque).

En su clase C#, inserte el siguiente código:

private static byte[] m_Bitmap = null; 

public byte[] Bitmap 
{ 
    get 
    { 
     FileStream fs = new FileStream(bitmapPath, FileMode.Open); 
     BinaryReader br = new BinaryReader(fs); 
     int length = (int)br.BaseStream.Length; 
     m_Bitmap = new byte[length]; 
     m_Bitmap = br.ReadBytes(length); 
     br.Close(); 
     fs.Close(); 
     return m_Bitmap; 
    } 
} 

Ahora, actualizar su C# Mapeo de objetos en CR utilizando la opción "Verificar base de datos". A continuación, debe ver la propiedad Bitmap como un campo CR. Solo arrástralo al formulario. Será del tipo IBlobFieldObject. Cuando corres, deberías ver tu imagen.

+0

¿Cómo se haría esto en VB.NET? – Keith

+0

Ha pasado mucho tiempo desde que usé Crystal o VB. No sé si puedo ayudar. ¿Qué parte de esto necesita ayuda para traducir a VB? ¿La matriz de bytes? Las secuencias/lectores? ¿La propiedad? ¿El mapeo de objetos en CR? –

+0

Casi todo, pero está bien, acabé usando Microsoft Reports y las imágenes dinámicas funcionaron perfectamente. 11.5 Crystal Reports parece una mierda cuando se trata de la opción de Ubicación gráfica. Ignora por completo todo lo que pones allí. Todas estas soluciones que encontré en línea para CR, fueron para versiones anteriores. Muchas gracias por responder a una publicación anterior. – Keith

1

Otra opción que he encontrado útil es insertar las imágenes que desea utilizar. Coloque el gráfico en consecuencia, luego haga clic con el botón derecho en el gráfico y vaya a Formato gráfico> Común. Marque la casilla Suprimir, luego haga clic en el botón de fórmula, que se muestra como x-2. Una vez en la ventana de fórmulas, simplemente agregue el código para determinar si el gráfico debe ser suprimido o no.

En mi caso, estaba construyendo una plantilla de factura para varias entidades. En la ventana de fórmulas, simplemente escribí COMPANY <> 1100, lo que significaba que cada vez que se ejecutaba la factura para una empresa distinta de 1100, el gráfico 1100 se suprimía.

Esperamos que esto hace la vida más fácil ...

Cuestiones relacionadas