Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SUBINFORMES
En este ejemplo vamos a ver la forma de crear un informes dentro de otro.
Para ello disponemos de una clase, llamada ClasePedidos, con los pedidos de una tienda, y la
clase ClaseLineas, con los artculos de cada pedido.
Empezamos creando un nuevo elemento Web Form llamado ejer5.aspx.
Para este ejercicio vamos a crear una tabla con los pedidos y dos botones. Al pulsar sobre uno,
veremos el informe con los artculos de ese pedido y, al pulsar sobre el otro, veremos el pedido
con los artculos como subinforme.
Empezamos creando la tabla, para ello, arrastramos un componente GridView al formulario.
Para asignarle los datos, vamos a su evento Page_Load y insertamos el siguiente cdigo:
if(!IsPostBack)
{
GridView1.DataSource = new ClasePedidos().Todos();
GridView1.DataBind();
}
Para crear los dos botones vamos a crear una nueva columna del tipo Template y, en ella,
insertar dos botones.
Pulsamos sobre Agregar nueva columna del men del GridView y seleccionamos el tipo
TemplateField:
Ahora, en el mismo men anterior, pulsamos sobre Editar plantillas y agregamos dos
botones a la plantilla.
CREAMOS EL INFORME
A continuacin, vamos a crear el informe de artculos (Botn derecho sobre el proyecto y
Agregar nuevo elemento de tipo informe) y le ponemos como nombre InformeArticulos.
A este elemento le vamos a aadir un nuevo conjunto de datos llamado DataSetArticulos.
Para aadir el nuevo conjunto de datos hay que darle a la opcin aadir de los datos del
informe.
Una vez aadidos los datos, arrastramos un elemento tabla y le asignamos todos los datos
excepto IdPedido.
Para que esto funcione, solamente nos queda insertar el cdigo del botn. Ser el siguiente:
Button boton = (Button)sender;
GridViewRow fila = (GridViewRow)boton.NamingContainer;
string pedido = fila.Cells[1].Text;
Session["pedido"] = pedido;
Response.Redirect("articulos.aspx");
Ahora, vamos a crear la pgina que va a ser la encargada de mostrar el informe. A este nuevo
formulario le llamaremos pedidos.aspx y en el agregaremos un ReportViewer y un
ScriptManager.
EVENTO SUBREPORTPROCESSING
Si comprobamos el resultado sin el elemento subinforme funcionar correctamente, pero si lo
hacemos con l, fallar. Esto es debido a que no le estamos enlazando los datos al subinforme.
Para hacerlo tendremos que crear el siguiente evento y aadrselo al informe.
En pedidos.apsx.cs agregamos el siguiente evento:
void SubreportProcessingEventHandler(object sender, SubreportProcessingEventArgs
e)
{
e.DataSources.Add(
new ReportDataSource("DataSetArticulos",
new ClaseLineas().Todos()));
}
Ahora, el subinforme funciona, pero no filtra los datos. Para conseguir que los filtre habr que
pasarle un parmetro al componente del informe y al subinforme.
Vamos primero al subinforme. Abrimos InformeArticulos.rdlc y agregamos un nuevo
parmetro de tipo entero llamado pedido.
ello,
abrimos
En su solapa Parmetros aadimos uno con el mismo nombre y con valor el dato IdPedido.
Ya solamente nos queda decirle al subinforme, en el momento de pasarle los datos, nos filtre
por el valor del parmetro. As que cambiamos el cdigo del evento
SubReportProcessingEventHandler por el siguiente:
e.DataSources.Add(
new ReportDataSource("DataSetArticulos",
new ClaseLineas().Filtro(int.Parse(e.Parameters[0].Values[0]))));