Como ya sabe, los informes FastReport.NET pueden tener formularios de diálogo que se muestran antes de la formación del informe. Gracias a los formularios puede especificar algunos variables de texto, de tipo booleano o numéricas. Pueden ser campos de texto, tablas, listas, listas despegables, fechas, casillas de verificación e incluso listas con casillas de verificación.
Los formularios de diálogo suelen utilizarse para filtrar los datos en un informe o para seleccionar los criterios de comportamiento del informe. Pero hoy hablamos de otra aplicación posible del formulario de diálogo.
Consideramos un caso, en el que necesite entrar los datos del informe antes de mostrarlo. Es un caso bastante simple, si habla de los campos de texto, casillas de verificación, listas particulares. Pero qué pasa si tiene una tabla con datos y quiere poder ajustar estos datos a mano antes de crear un informe?
Ahí es donde el componente Grid nos ayuda. Esto es una tabla con datos que podemos mostrar en un cuadro de diálogo antes de crear un informe.
Añadimos un cuadro de diálogo en un informe y colocamos el elemento Grid en él. Llamamos el menú contextual para él con el clic derecho:
Añada “Edit Collumns…” para añadir las columnas en una tabla.
En la ventana de edición de columnas añadimos las tres - Name, Address, Phone. Preste atención a la propiedad Customers.Name. Aquí nos referimos a una fuente de datos Customers, que no hay todavía en un informe. Pero lo añadimos más tarde por vía del script. Para el resto de las columnas necesita especificar las propiedades correspondientes.
La plantilla de página del informe es más simple – un solo objeto Table con tres columnas. Vamos a llenarlo en un script del informe.
Ahora vamos a añadir el controlador de eventos StartReport para un informe:
Un script del informe:
public class ReportScript { //La estructura de datos para la tabla public class Customer { public string Name {get; set; } public string Address {get; set; } public string Phone {get; set; } public Customer(string name, string address, string phone) { Name = name; Address = address; Phone = phone; } } private void _StartReport(object sender, EventArgs e) { //Una lista de usuarios List<Customer> customers = new List<Customer>(); //Entramos los datos predeterminados en una lista de usuarios customers.Add(new Customer("Kevin Smith", "221 52nd st, Brooklyn, NY, United States", "+12127599755")); customers.Add(new Customer("Justin Ford", "1556 Broadway, suite 416, NY, United States", "+12145678900")); customers.Add(new Customer("Amanda Stephenson", "455 Larkspur Dr., CA, United States", "+14105175379")); //Registramos una fuente de datos en un informe Report.RegisterData(customers, "Customers"); //Especificamos una fuente de datos en la tabla Grid1.DataSource = Report.GetDataSource("Customers"); //Especificamos los campos en las celdas Cell6.Text = "[Customers.Name]"; Cell7.Text = "[Customers.Address]"; Cell8.Text = "[Customers.Phone]"; } }
En este caso especificamos la estructura de datos Customer, que se utiliza para presentar las líneas en una tabla en un cuadro de diálogo y en un informe. Luego creamos una fuente de datos Customers y lo llenamos con copias de Customer. Luego registramos una fuente de datos recibida en un informe. ¿Recuerda cómo hemos especificado un campo de datos para las columnas en el objeto Grid? Esto es la fuente de datos a la que nos referíamos. Aquí también asignamos los campos de la fuente a las celdas de tabla (el objeto Table) en una plantilla de página.
Ahora para el objeto Table creamos el controlador de eventos ManualBuild en un pagina del informe. Este evento se llama después de crear un objeto en una pagina y permite cambiar una tabla que ya está lista para mostrarse. Así podemos cambiar el texto en una tabla por vía del script.
private void Table1_ManualBuild(object sender, EventArgs e) { //Especificamos una fuente de datos DataSourceBase rowData = Report.GetDataSource("Customers"); //Inicializamos los datos rowData.Init(); //Mostramos la primera línea de datos Table1.PrintRow(0); //Mostramos una columna Table1.PrintColumns(); //Recorrer todas las líneas de datos en la fuente while (rowData.HasMoreRows) { //Presentamos otra línea de datos Table1.PrintRow(1); //Presentamos una columna Table1.PrintColumns(); //tomamos la entrada siguiente de la fuente rowData.Next(); } }
Aquí rellenamos la tabla recorriendo simplemente todas las líneas de datos.
Vamos a ejecutar el informe. Lo primero que vamos a ver es un cuadro de diálogo con la tabla:
Hacemos doble clic en la primera celda para editar su texto:
Pulsamos OK y vemos el resultado:
Cómo ve, nuestros datos por defecto han cambiado a los que hemos entrado a mano. Así puede dar a los usuarios una opción de modificar los datos manualmente antes de crear un informe. Este ejemplo muestra el relleno de una tabla con los datos del script, pero nada impide a usted rellenarla con los datos de la fuente.