Subinforme

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.