Con bastante frecuencia surge la necesidad de establecer diferentes imágenes en el informe según unas condiciones o parámetros de entrada. Con este problema se ha enfrentado el susuario del generador de informes List&Label:
Sin embargo, el usuario no ha encontrado ninguna solución.
Por desgracia, no se puede insertar una imágen de un código .net. Es posible solo a la hora de trabajar con un informe en el diseñador List & Label.
Por lo tanto, queremos demostrarles cómo se puede implementaro en el generador de informes FastReport.Net.
Bueno, a la hora de crear un informe trabajamos con todos sus objetos directamente: los creamos, añadimos a la página del informe, establecemos propiedades, etc. Vamos a considerar un ejemplo muy simple de crear un informe desde el código de una aplicación de cliente con una imágen dentro.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//Create instance of class Report Report report = new Report(); //Add report page ReportPage page = new ReportPage(); report.Pages.Add(page); page.CreateUniqueName(); //App data band DataBand data = new DataBand(); //Add data band to page page.Bands.Add(data); data.CreateUniqueName(); data.Height = Units.Centimeters * 1; //Set band height //Create picture object PictureObject pic = new PictureObject(); pic.Bounds = new RectangleF(0, 0, Units.Centimeters * 5, Units.Centimeters * 5); //Set object bounds pic.Image = new Bitmap("../../App_Data/snow_flake.ico"); //Set picture pic.Parent = data; //Set picture parent object pic.CreateUniqueName(); report.Prepare(); //Build report report.Show(); //Show report |
Es un ejemplo muy simple en el que hay solo una banda Data. Como este informe se crea enteramente en el código del programa, no tenemos ningún problema con la creación de un objeto co una imágen y colocarlo en el informe. Crear un informe desde el código nos permite cambiarlo de cualquier modo según la lógica del programa.
Vamos a considerar otro caso. Supongamos que ya tiene un modelo de informe creado en el diseñador. Quiere cambiar la imágen en el informe según la lógica del programa. En este caso en el modelo de informe ya debe de haber el objeto Picture, y va a cambiar la misma imágen desde el código de la aplicación de cliente. Así se verá el código en el programa:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//Create report object Report report = new Report(); //Load report template into the report obj report.Load("../../App_Data/Picture.frx"); //Get picture object from the report template PictureObject pic = report.FindObject("Picture1") as PictureObject; //Set object bounds pic.Bounds = new RectangleF(0, 0, Units.Centimeters * 5, Units.Centimeters * 5); //Set the image pic.Image = new Bitmap("../../App_Data/snow_flake.ico"); //Build report report.Prepare(); //Show report report.Show(); |
Aquí encontramos el objeto con una imágen en el modelo de informe y cambiamos sus propiedades como queremos.
Y, por fin, el tercer modo de trabajar con el objeto Picture es del script embebido de informe. El script delinforme le permite cambiar el modelo y los datos en el informe como quiere. Puede añadir el objeto Picture al modelo previamente, así como añadirlo directamente al script del informe. Mucha flexibilidad, ¿no? No hay necesidad de utilizar la aplicación de cliente para administrar el contenido del informe. Es una gran ventaja para mí, ya que ahora no tengo que corregir el código de la aplicación.
El ejemplo para establecer una imágen en el script del informe es muy simple:
1 |
Picture1.Image = new Bitmap("C:/Users/Dimon/source/repos/PictureSetting/PictureSetting/App_Data/snow_flake.ico");
|
Lo que tiene que hacer es solo determinar el evento en que quiere cambiar la imágen. Por ejemplo, para el objeto Picture se puede utilizar el evento BeforePrint..