none
Error al imprimir CrystalReports utilizando Cross Page Postback y previouspage en los parámetros de entrada

    Pregunta

  • Buenas noches, Tengo un problema al imprimir un reporte de crystal cuando recibe los parámetros utilizando Cross Page Postback a través de la propiedad page.previouspage cuando la página origen envia los valores por medio de un boton que tiene la propiedad PostBackUrl="destino.aspx",

    Al dar click en el boton imprimir de la barra de crystal en la página destino y se recarga y como pregunta la siguiente propiedad en el load, si Page.PreviousPage != null sale error es porque la referencia de la página origen se ha perdido y no recupera los parámetros que se enviaron por eso es que sale la ventana de crystal pidiendo los valores de entrada.

    Les voy a dar el ejemplo con los datos como estoy construyendo la página para que por favor me colaboren, hay que hacer la anotación que cuando el reporte de crystal no necesita parametros los botones de imprimir y exportar pdf funcionan perfectamente. Les agradezco la colaboración.

    Página origen.aspx:

    captura un valor de fecha en un textbox llamado txtFecha.

    <asp:TextBox ID="txtFecha" runat="server"></asp:TextBox>

    Se crea un botón para establecer la propiedad  PostBackUrl para que el control pase a la pagina destino.aspx que es donde esta el reporte de crystal.

    <asp:Button ID="btnBuscar" runat="server" Text="Buscar" 
                        onclick="btnBuscar_Click" 
                        PostBackUrl="~/destino.aspx" />

    El el código del botón no se coloca nada por que automáticamnete se redirecciona hacia la pagina destino.aspx

    Pagina destino.aspx

    protected void Page_Load(object sender, EventArgs e)
    {

      // Valida que la página no se acceda directamente para que no genere error y tomar los parámetros de la página origen

    if (Page.PreviousPage != null)
      
    {
        
    string fecha;
      
         TextBox
     txtFecha = (TextBox)Page.PreviousPage.FindControl("txtFecha");

         fecha = txtFecha.Text;

        // Paso el valor al contenedor de crystal y despliega los datos bien la primera vez que entra.

       string ruta = Server.MapPath("reporte.rpt");

                rptDocument.Load(ruta);
                CrystalReportViewer1.ReportSource = rptDocument;

    ....... }    else

        {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "Error de Acceso", "alert('Esta página no se puede llamar directamente.');location.href='../login.aspx';", true);
                    return;
        }

    }

    Observaciones y Preguntas:

    1. Cuando entra por primera vez a la pagina de destino y se ha llamado desde la pagina origen.aspx la validación "if (Page.PreviousPage != null)" es verdadera y entra a realizar el código.

    2. Cuando se da clik en el boton de imprimir o exportar de la barra de crystal haciendo un paso a paso se observa que la página se recarga y al realizar la validación anterior sale falso y por lo tanto no entra a recuperar los datos y sigue por el else mostrando el mensaje de error en javascript y el reporte de crystal no se puede cargar, por consiguiente sale una ventana pidiendo los valores.

    3. Como se le puede decir a crystal o a .net que la página se ha invocado correctamente y no crea que se ha llamado directamente para que no se pierdan las referencias a la página anterior????.

    Un ejemplo mas completo se encuentra en este link "Pasando variables entre paginas web ASP.NET usando Cross Page Postback" y me esta funcionando solo tengo el problema cuando se envía a imprimir el reporte de crystal que se pierden las referencias de la pagina anterior: http://geeks.ms/blogs/sergiotarrillo/archive/2006/09/25/3803.aspx

    La siguiente página define el paso de parametros entre páginas http://msdn.microsoft.com/es-es/library/ms178139(v=vs.80).aspx

    Gracias

    domingo, 15 de abril de 2012 1:03

Respuestas

  • como pregunta la siguiente propiedad en el load, si Page.PreviousPage != null sale error es porque la referencia de la página origen se ha perdido y no recupera los parámetros que se enviaron por eso es que sale la ventana de crystal pidiendo los valores de entrada.

    pro se supone que cuando ingresa a la pagina validas si viene por PreviousPage, si lo ahces tomas al info y la guardas en algun lado, ya sea Session o algun control hidden etc

    porque cuando recarga y PreviousPage sea null, salteas la lectura de la info proveniente de la otra pagian y recuperas los datos de Session o control hidden

    esta parte no tienes porque ponerla

      Page.ClientScript.RegisterStartupScript(this.GetType(), "Error de Acceso", "alert('Esta página no se puede llamar directamente.');location.href='../login.aspx';", true);
                    return;

    es mas si habias asignado info a textbox esto consevan la info desdepues de un postback

    3-

    como comente cuando ingresa conserva la info de la otra pagina en algun lugar donde puedas recuperarlo


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 15 de abril de 2012 1:44