none
Pasar Paginas Totales de Crystal Reports a variable de VB .NET RRS feed

  • Pregunta

  • Que tal masters de la programacion, espero puedan ayudarme con mi problema, estoy tratando de obtener el Total Page Count que genera mi reporte y mandarlo llamar en Visual Basic .NET para pasarlo a una variable, para poder hacer una actualizacion en la base de datos. 

    El reporte esta hecho en Crystal Reports XI que viene en Visual Studio 2005, uso el Crystal Report Viewer para que se muestre el reporte.  Encontre una manera de obtener el numero pero al parecer hace que tarde mas cuando mandan a imprimir, por lo general entre 7 a 15 o hasta 20 segundos. Pienso que esto es debio a que hago el ShowLastPage y eso hace que tarde mas al momento de imprmir. Por eso quiero ver si ustedes saben alguna manera de obtener el Total Page Count del reporte sin necesidad de usar el ShowLastPage como lo hago yo. 
    Espero puedan ayudarme!
    Saludos!


    La forma que tengo ahorita para mandar llamar el reporte y despues obtener el numero de la ultima pagina es la siguiente:

    'Declaro variable de VB.NET para obtener el numero de pagina de reporte
    Dim Impresiones As Integer

    'Le digo al Crystal Report Viewer que muestre la ultima pagina que tiene
    miCrystalRptViewer.ShowLastPage()

    'Le asigno a la variable Impresiones el numero de pagina actual del Crystal Report Viewer
    'que es la ultima, ya que en el paso anterior le dije que mostrara la ultima.

    Impresiones = miCrystalRptViewer.GetCurrentPageNumber

    'Mando a imprimir el documento con todas las paginas que tiene
    miRptDoc.PrintToPrinter(1, True, 0, 0)

    ACTUALIZACION
    Hola a todos, he encontrado este codigo en internet, es para una pagina asp.net, solo necesito saber que funcion o metodo utlizar del crystal viewer(de color rojo) ya que en vb.net no es el mismo y asi poder obtener el numero total de paginas que tiene. Solo la linea de azul es lo que me interesa. Gracias, saludos!

    el codigo:
     
    Private Sub crystalreportviewer1_Navigate(ByVal source As Object, ByVal e As CrystalDecisions.Web.NavigateEventArgs) Handles crystalreportviewer1.Navigate

            Dim rd As CrystalDecisions.CrystalReports.Engine.ReportDocument = prepRpt2() 'preprpt2 is 
    my function to pass the login credentials and report perameters

            crystalreportviewer1.ReportSource = rd
            currentPage = e.NewPageNumber

    lastPage = rd.FormatEngine.GetLastPageNumber(crystalreportviewer1.RequestContext())

            If (currentPage > lastPage) Then currentPage = lastPage

            lblPageNums1.Text = CStr(currentPage) + " of " + CStr(lastPage)
            lblPageNums2.Text = lblPageNums1.Text
        End Sub

    martes, 24 de marzo de 2009 16:10

Respuestas

  • Ya encontre la respuesta, era algo "sencilla" pero tarde dos dias de busquedas intensas en el google para encontrarla.

    Aqui se las dejo para el proximo que ande sufriendo como yo jeje

    rpt.FormatEngine.GetLastPageNumber(New CrystalDecisions.Shared.ReportPageRequestContext())

    Si, eso era todo, obviamente todo va sobre una misma linea, y para pasar el numero de la ultima pagina del reporte a una variable solo hay que asignarle el valor:

    Dim UltimaPagina As Integer
    UltimaPagina = rpt.FormatEngine.GetLastPageNumber(
    New CrystalDecisions.Shared.ReportPageRequestContext())

    Y para comprobar que si funciona puedes ponerlo en un messagebox:

    MessageBox.Show(UltimaPagina)

    El rpt es un ReportDocument que se extrae de la libreria 
    CrystalDecisions.CrystalReports.Engine
    Ejemplo:
    Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument

    El CrystalDecisions.Shared.ReportPageRequestContext() hace una peticion de informacion a la(s) pagina(s) del reporte y asi se puede usar el GetLastPageNumber y obtener el numero de la ultima pagina.

    Yo use estas cuatro librerias para generar el reporte y poder usar la solucion que encontre, igual y pueden necesitar menos, pero asi me funciono jeje:

    Imports CrystalDecisions.CrystalReports
    Imports CrystalDecisions.CrystalReports.Engine
    Imports CrystalDecisions.ReportSource
    Imports CrystalDecisions.Shared

    El ejemplo completo seria asi:

    Dim UltimaPagina As Integer
    UltimaPagina = rpt.FormatEngine.GetLastPageNumber(New CrystalDecisions.Shared.ReportPageRequestContext())
    rpt.PrintToPrinter(1,
    True, 0, 0) 'Imprimimos todo el reporte con las paginas que tenga.
    rpt.Close() 'Cerramos el reporte
    rpt.Dispose() 'Destruimos el reporte para que no te sature la memoria


    Y con esto termino y soluciono mi duda sobre como obtener el numero de la ultima pagina de un reporte, espero les sirva al igual que a mi, saludos.


    Primero programo, despues existo. =P
    • Marcado como respuesta Papayaman miércoles, 25 de marzo de 2009 0:55
    miércoles, 25 de marzo de 2009 0:55

Todas las respuestas

  • Ya encontre la respuesta, era algo "sencilla" pero tarde dos dias de busquedas intensas en el google para encontrarla.

    Aqui se las dejo para el proximo que ande sufriendo como yo jeje

    rpt.FormatEngine.GetLastPageNumber(New CrystalDecisions.Shared.ReportPageRequestContext())

    Si, eso era todo, obviamente todo va sobre una misma linea, y para pasar el numero de la ultima pagina del reporte a una variable solo hay que asignarle el valor:

    Dim UltimaPagina As Integer
    UltimaPagina = rpt.FormatEngine.GetLastPageNumber(
    New CrystalDecisions.Shared.ReportPageRequestContext())

    Y para comprobar que si funciona puedes ponerlo en un messagebox:

    MessageBox.Show(UltimaPagina)

    El rpt es un ReportDocument que se extrae de la libreria 
    CrystalDecisions.CrystalReports.Engine
    Ejemplo:
    Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument

    El CrystalDecisions.Shared.ReportPageRequestContext() hace una peticion de informacion a la(s) pagina(s) del reporte y asi se puede usar el GetLastPageNumber y obtener el numero de la ultima pagina.

    Yo use estas cuatro librerias para generar el reporte y poder usar la solucion que encontre, igual y pueden necesitar menos, pero asi me funciono jeje:

    Imports CrystalDecisions.CrystalReports
    Imports CrystalDecisions.CrystalReports.Engine
    Imports CrystalDecisions.ReportSource
    Imports CrystalDecisions.Shared

    El ejemplo completo seria asi:

    Dim UltimaPagina As Integer
    UltimaPagina = rpt.FormatEngine.GetLastPageNumber(New CrystalDecisions.Shared.ReportPageRequestContext())
    rpt.PrintToPrinter(1,
    True, 0, 0) 'Imprimimos todo el reporte con las paginas que tenga.
    rpt.Close() 'Cerramos el reporte
    rpt.Dispose() 'Destruimos el reporte para que no te sature la memoria


    Y con esto termino y soluciono mi duda sobre como obtener el numero de la ultima pagina de un reporte, espero les sirva al igual que a mi, saludos.


    Primero programo, despues existo. =P
    • Marcado como respuesta Papayaman miércoles, 25 de marzo de 2009 0:55
    miércoles, 25 de marzo de 2009 0:55
  • grande che.... es lo mismo que estuve buscando durante un tiempo largo...

     

    muy buen aporte... saludos

    lunes, 5 de julio de 2010 19:34
  • Muy bueno che! me funciono! gracias!
    jueves, 24 de mayo de 2012 19:18