EJEMPLO 4. MATRIZ - Ua

Transcription

EJEMPLO 4. MATRIZEn este ejemplo vamos a ver la forma de crear matrices de datos en el informe. Las matricesson tablas con el número de columnas variable.Para ello disponemos de una clase, llamada ClaseMatricula, con la definición de la clase y otra,llamada ClaseMatriculas, que devuelve un listado de las mismas. Esta clase devuelve laspersonas matriculadas de cada universidad en cada estudio.Empezamos creando un nuevo elemento “Web Form” llamado ejer4.aspx.CREAMOS EL INFORMEA continuación, vamos a crear el informe (Botón derecho sobre el proyecto y “Agregar nuevoelemento ” de tipo informe.A este elemento le vamos a añadir un nuevo conjunto de datos llamado“DataSetMatriculaciones”. Para añadir el nuevo conjunto de datos hay que darle a la opciónañadir de los datos del informe.

Una vez añadidos los datos, arrastramos un elemento matriz.Y le arrastramos el dato “PaisUni” en las columnas, el dato “Facultad” en las filas y en datosponemos “[Count(Nif)]”. Esto creará una tabla con el número de matriculados de cada facultadpor país.ENLAZAMOS LOS DATOSPara poder ver el informe en el formulario creado al principio del ejemplo, debemos arrastrarun componente ReportViewer con un ScriptManager.

Una vez añadidos, escribimos el siguiente código en el método Page Load. El código enlaza losdatos con el informe y le dice que datos debe Sources.Add(new ReportDataSource("DataSetMatriculaciones",new ort.ReportPath }El Resultado es el siguiente:Vemos que tenemos los alumnos matriculados en cada facultad por país.GRUPOS PRIMARIOS U SECUNDARIOSAl igual que ocurría en las tablas, podemos agrupar los datos en subgrupos. A estos subgruposse les denomina grupos secundarios.En el ejemplo vamos a hacer que se nos muestren las universidades de cada país y los estudiosde cada facultad.No tenemos más que arrastrar el subgrupo o grupo secundario a la matriz, debajo del grupoprimario.

El resultado será el siguiente:GRUPOS ADYACENTESAdemás de grupos primarios y secundarios, podemos crear grupos adyacentes. Estos gruposactúan independientemente de los otros grupos y, dan como resultado, una tabla creada comosi hubiésemos creado dos. Para que quede mas claro veamos el ejemplo.Además de la separación de las matriculaciones por país y por universidad, queremos saber losmatriculaciones por año.Para crear un grupo adyacente, vamos al menú de grupos y pulsamos sobre la pestaña delgrupo “PaisUni”, ya que vamos a crear un grupo adyacente a él.En su menú elegimos “Agregar grupo/Adyacente posterior ” y seleccionamos que agrupe por“Anyo”.Se nos habrá creado el nuevo grupo con el siguiente resultado. Recordar poner “[Count(Nif)]”como dato del nuevo grupo.

TOTALESLos totales en las matrices actúan de la misma forma que en las tablas. Se pueden crear totalestanto para los grupos primarios como de los secundarios y los adyacentes. Además se puedencrear totales de los grupos de filas y de los grupos de columnas.En nuestro ejemplo crearemos totales globales tanto en las columnas como en las filas. Paraello solamente agregaremos el total en los grupos primarios y adyacentes.Recordar que para agregar un total hay que seleccionar el grupo en menú inferior de grupos yelegir “Agregar total”.Como resultado tenemos el siguiente:FORTALEZA DE LAS MATRICESLa gran fortaleza de las matrices es que crea las filas y las columnas según los datos de laconsulta. Por tanto, si variamos los datos, nos variará el resultado sin modificar nuestroinforme.Para comprobarlo abrimos la clase ClaseMatriculas. En la parte que crea el listado con todossus elementos vamos a añadir dos elementos nuevos:

lista.Add(new ClaseMatricula() { Nif "88888880A", NombreCompleto "Nombreusu71", Facultad "Derecho", Estudio "Derecho", Universidad "UB", PaisUni "Alemania", Anyo "2011" });lista.Add(new ClaseMatricula() { Nif "88888881A", NombreCompleto "Nombreusu72", Facultad "Derecho", Estudio "Criminologia", Universidad "UB2",PaisUni "Alemania", Anyo "2011" });Hemos añadido como dato dos alumnos de un nuevo país, en universidades diferentes. Ahoracomprobaremos como, al vuelo, se van a crear las nuevas columnas.OCULTAR SUBGRUPOExiste la posibilidad de ocultar un subgrupo según el valor de un determinado parámetro.Para hacerlo, debemos pulsar con el botón derecho sobre el grupo y seleccionar “Propiedadesde grupo ”.En la solapa “Visibilidad” podremos hacer que ese grupo no se vea en la matriz.NOTA: En la versión actual de Visual estudio esta opción tiene un bug y no muestra elementos,veamos en el próximo punto como solucionarlo.

Observamos que no salen datos para el grupo PaisUni por causa de un bug.VISUALIZACIÓN INTERACTIVAPodemos hacer que un elemento haga que un subgrupo se muestre o no.Vamos a arrastrar un cuadro de texto y hacer que al pincharlo muestro o oculte el subgrupo.Arrastramos un elemento “cuadro de texto” y escribimos en él “Ver/ocultar subgrupo”.Al cuadro de texto le vamos a poner el nombre “TextboxActivar”.Pulsamos botón derecho sobre el subgrupo y seleccionamos “Propiedades de grupo ”.

En la solapa “Visibilidad” elegimos lo siguiente:Esto hará que el cuadro de texto active o desactive la visualización del subgrupo.Ahora, si quisiéramos saltarnos el bug y sacar la matriz sin mostrar el subgrupo, podríamosocultar el cuadro de texto que interacciona con él y se quedaría oculto por defecto.Esto no tiene mucho sentido, pero podríamos pasar un parámetro y ocultarlo o no en funcióndel valor del parámetro.CLASEMATRIZUna matriz crea sus filas, columnas y datos en función de los datos que contiene el dato queagregamos a los campos de la matriz. Es decir, si le decimos a una matriz que debe de mostrarlos países como columnas, solamente funcionará si uno de los datos se llama países.Si quisiéramos que el informe nos muestre otros datos, como por ejemplo los de ClaseVenta,tendríamos que crear otro informe con otra matriz diferente.¿Cómo podemos hacer que, independientemente del nombre de los campos, se cree unamatriz según la sentencia o clase que utilicemos para enlazar los datos?Vamos a crear una clase llamada ClaseMatriz, la cual utilizaremos para crear una matrizgenérica y, de esa forma, rellenarla sea cual sean sus datos.

public class ClaseMatriz{public string Columna { get; set; }public string Subcolumna { get; set; }public string Fila { get; set; }public string Subfila { get; set; }public string Dato { get; set; }public ClaseMatriz(){Columna "";Subcolumna "";Fila "";Subfila "";Dato "";}}Ahora haremos un método en ClaseMatriculas y otro en ClaseVentas que devuelva los valorescomo un listado de ClaseMatriz.Estos métodos deberían de leer los elementos de la base de datos, pero como los datos lostenemos estáticos por el mal funcionamiento de la red del aula, los leeremos del método quelos devuelve todos.Así quedará el método de ClaseMatriculas:public List ClaseMatriz Matriculas(){List ClaseMatriz lista new List ClaseMatriz ();foreach(var mat in Todos()){lista.Add(new ClaseMatriz() {Columna mat.PaisUni,Subcolumna mat.Universidad,Fila mat.Facultad,Subfila mat.Estudio,Dato mat.Nif });}return lista;}Y así quedará el método de ClaseVentas.public List ClaseMatriz Ventas(){List ClaseMatriz lista new List ClaseMatriz ();foreach (var mat in Filtrar()){lista.Add(new ClaseMatriz(){Columna mat.Pais,Subcolumna mat.Region,Fila mat.Categoria,Subfila mat.Subcategoria,Dato mat.Total.ToString()});}return lista;}

Ahora crearemos el informe con los nuevos datos. Creamos un informe llamadoInformeMatriz.rdlc y agregamos la matriz de tal forma que quede así (al DataSet de los datosles llamaremos DataSetMatriz en el ejemplo):Ahora es el momento de enlazar los datos. Para ello vamos a crear un nuevo elemento “WebForm” con nombre ejeMatriz.aspx y situaremos en el dos botones. La idea es hacer que,dependiendo del botón que pulsemos, se verán unos datos o otros.Además de los dos botones, vamos a agregar un ReportViewer y un ScriptManager.Con las propiedades de los botones les cambiamos su nombre y, pulsando doble click sobrecada uno de ellos, creamos los eventos que se ejecutan al pulsar sobre ellos.Al primer botón le llamaremos Matriculaciones y en su evento Click insertaremos el .Add(new ReportDataSource("DataSetMatriz",new ClaseMatriculas().Matriculas()) );ReportViewer1.LocalReport.ReportPath resh();Al segundo botón le llamaremos Ventas y su evento Click tendrá el siguiente r();ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSetMatriz",new .ReportPath resh();

PASAR PARÁMETROS CON NOMBRES DE MATRIZSi nos fijamos en el resultado, nos saldrá el nombre de “filas y “subfilas” en la cabecera de lamatriz. Esto se puede quitar, pero vamos a hacer que lo definamos nosotros por parámetro.Agregamos dos nuevos parámetros“Nuevo/parámetro ”).en los “Datosdel informe”(Pulsar sobreVamos a crear dos parámetros con los nombre de “NombreFila” y “NombreSubfila” y que seandel tipo texto.Esos parámetros los arrastramos a la matriz para que se muestren en ella:Ahora solamente nos queda pasar los parámetros desde en evento de los botones.El botón de las matriculaciones quedará ;ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSetMatriz",new ClaseMatriculas().Matriculas()) );ReportViewer1.LocalReport.ReportPath "InformeMatriz.rdlc";ReportParameter[] parametros new ReportParameter[2];parametros[0] new ReportParameter("NombreFila", "Facultades");parametros[1] new ReportParameter("NombreSubfila", s(parametros);ReportViewer1.LocalReport.Refresh();

Y el evento del segundo ();ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSetMatriz",new .ReportPath "InformeMatriz.rdlc";ReportParameter[] parametros new ReportParameter[2];parametros[0] new ReportParameter("NombreFila", "Categorias");parametros[1] new ReportParameter("NombreSubfila", sh();OCULTAR O VISUALIZAR SUBGRUPOSPara practicar lo que hemos aprendido anteriormente, vamos a añadir un elemento que alpulsarlo muestre u oculte un subgrupo.Esta vez, y para darnos cuenta de la potencia de este elemento, vamos a hacer que el propiogrupo sea el encargado de mostrar o no su subgrupo.Pulsamos sobre el botón derecho sobre el subgrupo “Subcolumna” y seleccionamos“Propiedades de grupo ”.En la pestaña Visualizar, activamos la opción de activar o desactivar el elemento yseleccionamos el nombre del grupo que va a hacer esta función.Si vemos el resultado, ahora podremos ocultar los subgrupos del grupo que queramosindependientemente, sin que se oculten para los demás grupos.

También, como hemos explicado anteriormente, podemos ocultar o mostrar en función de unparámetro o valor. Vamos a hacer que para la matriz de matriculaciones inicialmente aparezcael grupo visible y para la de ventas oculto.En la solapa visualizar anterior, deberemos elegir la opción “Mostrar u ocultar en función deuna expresión” y, le asignamos la siguiente: IIf(Parameters!NombreFila.Value "Facultades", false, true)

EJEMPLO 4. MATRIZ En este ejemplo vamos a ver la forma de crear matrices de datos en el informe. Las matrices son tablas con el número de columnas variable.