Los informes con agrupación son una cosa indispensable para analizar datos. Pero cuando hay muchos datos y no hay necesidad de mostrarlos todos, este tipo de informe parece pesado y superfluo. Enonces quiere encontrar una solución universal para esos casos. Y hay una.
Un informe con una lista desplegable es, esencialmente, un informe con la agrupación de datos pero con la posibilidad de ocultar y mostrar datos en un grupo con un clic del ratón. No es solo cómodo, sino también bonito. Al fin y al cabo, el informe se hace un objeto interactivo. El usuario disfruta de la posibilidad de mostrar datos.
Vamos a ver en un ejemplo cómo crear un informe así. En primer lugar, como en el informe Master-Detail, necesitamos una fuente de datos con tablas viculadas. Supongamos que tenemos dos tablas: customer y orders.
Un cliente puede hacer muchos pedidos, se trata de una relación unívoca. Vamos a añadirla. Hacemos clic en el botón Actions y seleccionamos en la lista desgplegable New Relation ...
La tabla padre es la principal, entonces, seleccionamos customer. La tabla hijo es, respectivamente, orders. En customer hay una clave primaria CustNo. La seleccionamos entre las columnas. En orders hay una clave externa CustNo. Selecciónela también.
Como resultado, obtenemos la conexión:
Ahora vamos a crear un modelo de informe. Añada una banda group header. En esta vamos a ubicar los campos de la conexión: “orders.customer.Company”, “orders.customer.Addr1”, “orders.customer.Phone”, “orders.customer.Contact”.
Además de estos campos, añadimos a esta banda un control checkbox. En su propiedad CheckedSymbol seleccione Plus, mientras que en la UncheckedSymbol, Minus.
Añada los campos OrderNo, SaleDate, PaymentMethod y AmountPaid de la tabla orders a la banda Data.También añada una banda cabecera para los datos y cabeceras de campo:
Haga doble clic en el nombre de la banda (Headline). Seleccione el campo para la agrupación:
Ahora seleccione checkbox que hemos seleccionado anteriormente. Atribúyale una propiedad Hyperlink:
Seleccione la banda Group Header y cree para esta un manipulador de eventos BeforePrint:
1 2 3 4 5 6 7 8 9 10 11 |
private void GroupHeader1_BeforePrint(object sender, EventArgs e) { string groupName = (String)Report.GetColumnValue("orders.customer.Company"); // get the group name bool groupVisible = expandedGroups.Contains(groupName); // Check group visibility DataHeader1.Visible = groupVisible; Data1.Visible = groupVisible;// Set the visibility of data in accordance with the visibility of the group GroupFooter1.Visible = groupVisible;// Set the visibility of the basement of the group in accordance with the visibility of the group CheckBox1.Checked = !groupVisible;// Set the state of the flag depending on the visibility of the group } |
También añadimos a la clase una lista de grupos expandidos:
1 |
private List<string> expandedGroups = new List<string>();
|
Volvamos a nuestro checkbox. Creamos para este un manipulador de eventos Click:
1 2 3 4 5 6 7 8 9 |
private void CheckBox1_Click(object sender, EventArgs e) { string groupName = (sender as CheckBoxObject).Hyperlink.Value; // We get the name of the group from the hyperlink if (expandedGroups.Contains(groupName)) // If the list of visible groups contains the selected group expandedGroups.Remove(groupName); // Then remove the selected from the list of visible groups. else expandedGroups.Add(groupName); // Otherwise add the group to the list of visible Report.Refresh(); // Update Report } |
Arranque el informe en el modo de vista previa:
Ahora haga clic en cualquier signo "más":
Cuando hace clic en el signo "más", el grupo se cierra. Es muy cómodo, ¿no?.