PDF de programación - Ejemplo5- Subinformes

Imágen de pdf Ejemplo5- Subinformes

Ejemplo5- Subinformesgráfica de visualizaciones

Publicado el 29 de Mayo del 2017
852 visualizaciones desde el 29 de Mayo del 2017
301,4 KB
9 paginas
Creado hace 11a (19/11/2012)
EJEMPLO 5. 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 artículos 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 artículos de ese pedido y, al pulsar sobre el otro, veremos el pedido

con los artículos 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 código:



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.



A uno le ponemos como nombre “Pedido” y al otro “Articulos”.

Importante: Pulsamos doble Click en cada botón para crear el evento de cada botón para

posteriormente utilizarlo.

Para finalizar de editar la plantilla seleccionamos “Terminar edición de plantilla”.



CREAMOS EL INFORME

A continuación, vamos a crear el informe de artículos (Botón derecho sobre el proyecto y

“Agregar nuevo elemento…” de tipo informe) y le ponemos como nombre InformeArticulos.

A este elemento le vamos a añadir un nuevo conjunto de datos llamado “DataSetArticulos”.

Para añadir el nuevo conjunto de datos hay que darle a la opción añadir de los datos del

informe.



Una vez añadidos los datos, arrastramos un elemento tabla y le asignamos todos los datos

excepto IdPedido.



ENLAZAMOS LOS DATOS

Ahora vamos a crear un nuevo formulario llamado “articulos.aspx” con un ReportViewer y un

ScriptManager. Este nuevo formulario recibirá el pedido por una variable de session y filtrará

los artículos.



En el evento Page_Load de este formulario agregamos el siguiente código:

if(!IsPostBack)
{
if(Session["pedido"] != null)
{
string pedido = (string) Session["pedido"];
Session.Remove("pedido");

ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(
new ReportDataSource("DataSetArticulos",
new ClaseLineas().Filtro(int.Parse(pedido))));
ReportViewer1.LocalReport.ReportPath = "InformeArticulos.rdlc";
ReportViewer1.LocalReport.Refresh();
}
}


Para que esto funcione, solamente nos queda insertar el código del botón. 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");

CREAMOS EL INFORME DE PEDIDO

Ahora vamos a crear el informe que contendrá, como subinforme, el informe anteriormente

creado.

Creamos un nuevo informe llamado “InformePedido” y le agregamos el informe de datos de la

ClasePedidos(el nuevo origen de datos se llamará DataSetPedidos).



El nuevo informe tendrá esta forma:

Pulsando con el botón derecho sobre el subinforme y seleccionando “Propiedades del

subinforme…” podremos cambiar sus propiedades.

De momento, lo más importante es ponerle en nombre del informe que debe abrir. Este

nombre lo deberemos poner donde dice “Usar este informe como un subinforme” (no se pone

la extensión del informe).



Ahora, vamos a crear la página 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.





En el evento Page_Load tendrá en siguiente código:

if (!IsPostBack)
{
if (Session["pedido"] != null)
{
string pedido = (string)Session["pedido"];
Session.Remove("pedido");

ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(
new ReportDataSource("DataSetPedidos",
new ClasePedidos().Filtro(int.Parse(pedido))));
ReportViewer1.LocalReport.ReportPath = "InformePedidos.rdlc";
ReportViewer1.LocalReport.Refresh();
}
}


Ahora, nos falta insertar el código del botón:

Button boton = (Button)sender;
GridViewRow fila = (GridViewRow)boton.NamingContainer;

string pedido = fila.Cells[1].Text;

Session["pedido"] = pedido;
Response.Redirect("pedidos.aspx");



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 añadírselo 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()));
}


Para agregar el evento, el código del Page_Load quedará así:

if (!IsPostBack)
{
if (Session["pedido"] != null)
{
string pedido = (string)Session["pedido"];
Session.Remove("pedido");

ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.SubreportProcessing +=
new SubreportProcessingEventHandler(SubreportProcessingEventHandler);
ReportViewer1.LocalReport.DataSources.Add(
new ReportDataSource("DataSetPedidos",
new ClasePedidos().Filtro(int.Parse(pedido))));
ReportViewer1.LocalReport.ReportPath = "InformePedidos.rdlc";
ReportViewer1.LocalReport.Refresh();
}
}


Ahora, el subinforme funciona, pero no filtra los datos. Para conseguir que los filtre habrá que

pasarle un parámetro al componente del informe y al subinforme.

Vamos primero al subinforme. Abrimos “InformeArticulos.rdlc” y agregamos un nuevo

parámetro de tipo entero llamado “pedido”.

Ahora

falta pasárselo desde el

componente Subinforme. Para ello, abrimos

“InformePedidos.rdlc” y abrimos el panel de las propiedades del subinforme.

En su solapa “Parámetros” añadimos 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 parámetro. Así que

cambiamos

el

código del

evento

SubReportProcessingEventHandler por el siguiente:


e.DataSources.Add(
new ReportDataSource("DataSetArticulos",
new ClaseLineas().Filtro(int.Parse(e.Parameters[0].Values[0]))));



PROBLEMAS CON EL PARÁMETRO

El botón ahora funciona correctamente, pero si nos fijamos, el otro botón no muestra datos ya

que espera un parámetro y no se lo estamos pasando.

Para que funcione, basta con ir a las propiedades del parámetro de “InformeArticulos.rdlc” y

decirle que el parámetro permita nulos.
  • Links de descarga
http://lwp-l.com/pdf3758

Comentarios de: Ejemplo5- Subinformes (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad