Upload
javier-flores
View
213
Download
0
Embed Size (px)
Citation preview
8/19/2019 Subinforme
1/9
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 ejer!.asp".
Para este ejercicio vamos a crear una tabla con los pedidos y dos botones. #l 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 $rid%ie& al formulario.
Para asi'narle los datos, vamos a su evento Pa'e(Load y insertamos el si'uiente c)di'o*
if(!IsPostBack){
GridView1.DataSource = new ClasePedidos().odos()
GridView1.DataBind()
"
Para crear los dos botones vamos a crear una nueva columna del tipo “+emplate y, en ella,
insertar dos botones.
8/19/2019 Subinforme
2/9
Pulsamos sobre “#'re'ar nueva columna del men del $rid%ie& y seleccionamos el tipo
“+emplateField*
#-ora, en el mismo men anterior, pulsamos sobre “Editar plantillas y a're'amos dos
botones a la plantilla.
# uno le ponemos como nombre “Pedido y al otro “#rticulos.
mportante* Pulsamos doble Clic/ en cada bot)n para crear el evento de cada bot)n para
posteriormente utilizarlo.
Para finalizar de editar la plantilla seleccionamos “+erminar edici)n de plantilla.
8/19/2019 Subinforme
3/9
CREAMOS EL INFORME
# continuaci)n, vamos a crear el informe de artículos 01ot)n derec-o sobre el proyecto y
“#'re'ar nuevo elemento2 de tipo informe3 y le ponemos como nombre nforme#rticulos.
# este elemento le vamos a a4adir un nuevo conjunto de datos llamado “5ata6et#rticulos.
Para a4adir el nuevo conjunto de datos -ay 7ue darle a la opci)n a4adir de los datos del
informe.
8na vez a4adidos los datos, arrastramos un elemento tabla y le asi'namos todos los datos
e"cepto dPedido.
ENLAZAMOS LOS DATOS
#-ora vamos a crear un nuevo formulario llamado “articulos.asp" con un 9eport%ie&er y un
6cript:ana'er. Este nuevo formulario recibir; el pedido por una variable de session y filtrar;
los artículos.
8/19/2019 Subinforme
4/9
En el evento Pa'e(Load de este formulario a're'amos el si'uiente c)di'o*
if(!IsPostBack)
{if(Session#$%edido$& != null)
{
strin' %edido = (strin') Session#$%edido$&
Session.eo*e($%edido$)
e%ortViewer1.+ocale%ort.DataSources.Clear()
e%ortViewer1.+ocale%ort.DataSources.,dd(
new e%ortDataSource($DataSet,rticulos$-
new Clase+ineas().iltro(int.Parse(%edido))))
e%ortViewer1.+ocale%ort.e%ortPat/ = $Infore,rticulos.rdlc$
e%ortViewer1.+ocale%ort.efres/()
"
"
Para 7ue esto funcione, solamente nos 7ueda insertar el c)di'o del bot)n. 6er; el si'uiente*
Button 0oton = (Button)sender
GridViewow fila = (GridViewow)0oton.ain'Container
strin' %edido = fila.Cells#1&.e2t
Session#$%edido$& = %edido
es%onse.edirect($articulos.as%2$)
CREAMOS EL INFORME DE PEDIDO
#-ora vamos a crear el informe 7ue contendr;, como subinforme, el informe anteriormente
creado.
Creamos un nuevo informe llamado “nformePedido y le a're'amos el informe de datos de la
ClasePedidos0el nuevo ori'en de datos se llamar; 5ata6etPedidos3.
8/19/2019 Subinforme
5/9
El nuevo informe tendr; esta forma*
Pulsando con el bot)n derec-o sobre el subinforme y seleccionando “Propiedades del
subinforme2 podremos cambiar sus propiedades.
5e momento, lo m;s importante es ponerle en nombre del informe 7ue debe abrir. Este
nombre lo deberemos poner donde dice “8sar este informe como un subinforme 0no se pone
la e"tensi)n del informe3.
#-ora, vamos a crear la p;'ina 7ue va a ser la encar'ada de mostrar el informe. # este nuevo
formulario le llamaremos “pedidos.asp" y en el a're'aremos un 9eport%ie&er y un
6cript:ana'er.
8/19/2019 Subinforme
6/9
En el evento Pa'e(Load tendr; en si'uiente c)di'o*
if (!IsPostBack)
{
if (Session#$%edido$& != null)
{
strin' %edido = (strin')Session#$%edido$&
Session.eo*e($%edido$)
e%ortViewer1.+ocale%ort.DataSources.Clear()
e%ortViewer1.+ocale%ort.DataSources.,dd(
new e%ortDataSource($DataSetPedidos$-
new ClasePedidos().iltro(int.Parse(%edido))))
e%ortViewer1.+ocale%ort.e%ortPat/ = $InforePedidos.rdlc$e%ortViewer1.+ocale%ort.efres/()
"
"
#-ora, nos falta insertar el c)di'o del bot)n*
Button 0oton = (Button)senderGridViewow fila = (GridViewow)0oton.ain'Container
strin' %edido = fila.Cells#1&.e2t
Session#$%edido$& = %edidoes%onse.edirect($%edidos.as%2$)
8/19/2019 Subinforme
7/9
EVENTO SUBREPORTPROCESSING
6i comprobamos el resultado sin el elemento subinforme funcionar; correctamente, pero si lo
-acemos con
8/19/2019 Subinforme
8/9
#-ora falta pas;rselo desde el componente 6ubinforme. Para ello, abrimos“nformePedidos.rdlc y abrimos el panel de las propiedades del subinforme.
En su solapa “Par;metros a4adimos uno con el mismo nombre y con valor el dato dPedido.
=a solamente nos 7ueda decirle al subinforme, en el momento de pasarle los datos, nos filtre
por el valor del par;metro. #sí 7ue cambiamos el c)di'o del evento
6ub9eportProcessin'Event>andler por el si'uiente*
e.DataSources.,dd(new e%ortDataSource($DataSet,rticulos$-
new Clase+ineas().iltro(int.Parse(e.Paraeters#7&.Values#7&))))
8/19/2019 Subinforme
9/9
PROBLEMAS CON EL PARÁMETRO
El bot)n a-ora funciona correctamente, pero si nos fijamos, el otro bot)n no muestra datos ya
7ue espera un par;metro y no se lo estamos pasando.
Para 7ue funcione, basta con ir a las propiedades del par;metro de “nforme#rticulos.rdlc y
decirle 7ue el par;metro permita nulos.