ruta - Cambia dinámicamente una imagen en un Crystal Report en tiempo de ejecución
crystal reports parametros dinamicos (7)
¡También tuve esta pregunta (y voté la tuya)!
[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 sugerido (pero lo intenté y fallé tanto en C # -2005 como en C # -2008).
- Elija un directorio y coloque un BMP allí (por ejemplo, "C: / Temp / image.bmp").
- Desde el CR-Designer a) Haga clic derecho-> 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 OK f) Coloque la imagen en el formulario.
- Sobrescribe / actualiza la imagen en tiempo de ejecución en tu código C #. En teoría, desde que insertó un Enlace a 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í. De aquí en adelante, 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).
Estoy usando Crystal Reports incluido con VisualStudio 2005. Me gustaría cambiar la imagen que se muestra en el informe en tiempo de ejecución idealmente construyendo una ruta al archivo de imagen y luego mostrar esa imagen en el informe.
¿Alguien ha podido lograr esto con esta versión de Crystal Reports?
En el trabajo hacemos esto al insertar la (s) imagen (es) 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.
Editar: Vale la pena señalar que si vincula su informe de cristal a objetos antiguos simples, quiere exponer una propiedad de bytes [] para que el informe lo trate como una imagen.
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 actualice su Asignación de objetos C # en CR utilizando la opción "Verificar base de datos". Debería ver la propiedad Bitmap
como un campo CR. Solo arrástralo al formulario. Será del tipo IBlobFieldObject. Cuando corres, deberías ver tu imagen.
Al igual que Josh dijo ... Deberás insertar 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.
También puede usar una fórmula condicional para establecer la ubicación de una imagen. Ver Crystal Reports: Imágenes dinámicas .
Intente utilizar una combinación de usar un parámetro que contenga la ruta de la imagen y el tutorial en esta página: http://www.idautomation.com/crystal/streaming_crystal.html
Luego, en el paso n. ° 8, use el parámetro en lugar de una ruta codificada.
Otra opción que he encontrado útil es insertar las imágenes que te gustaría usar. 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 múltiples entidades. En la ventana de fórmula, simplemente escribí COMPAÑÍA <> 1100, lo que significaba que cada vez que se ejecutaba la factura para una empresa distinta de 1100, se suprimía el gráfico 1100.
Con suerte, esto hace la vida más fácil ...