Interfaz Crystal Reports con .NET
Interfaz para cargar fácilmente un reporte basado en SQL Server

Fecha: 30/Oct/2004 (29 de octubre del 2004)
Autor: José Manuel Makepeace (Makepeace@mailderiver.com.ar)

 


 

A continuación encontrarán el código necesario para cargar de forma sencilla un reporte hecho con Crystal Reports,  utilizando un par de funciones de la clase estática llamada CR. Este código contiene funciones para establecer una conexión con un servidor SQL Server proporcionando los parámetros de conexión (Servidor, Base de datos, Usuario, Contraseña).

 

El código de la clase CR es el siguiente:

 

Imports CrystalDecisions.CrystalReports

Imports CrystalDecisions.CrystalReports.Engine

Imports CrystalDecisions.ReportSource

Imports CrystalDecisions.Shared

Imports CrystalDecisions.Windows

 

'CLASE PARA CARGAR UN REPORTE BASADO EN SQL SERVER

 

Public Class cr

 

      Private Shared loginfo As CrystalDecisions.Shared.ConnectionInfo

      Public Shared exportar_mail As Boolean

      Public Shared rutaRpt As String

      Public Shared stillOpen As Boolean

      Public Shared custTitle As String

     

Public Shared Sub conectar( ByVal servidor As String, ByVal basedatos As String, ByVal usuario As String, ByVal password As String)

            loginfo = New CrystalDecisions.Shared.ConnectionInfo

            loginfo.ServerName = servidor

            loginfo.DatabaseName = basedatos

            loginfo.UserID = usuario

            loginfo.Password = password

      End Sub

     

Private Shared Function genpar ( ByVal ParamArray matriz() As String) As ParameterFields

            Dim c As Long, p1, p2 As String, l As Integer

            Dim parametros As New ParameterFields

            For c = 0 To matriz.Length - 1

                  l = InStr (matriz(c), ";")

                  If l > 0 Then

                        p1 = Mid (matriz(c), 1, l - 1)

                        p2 = Mid (matriz(c), l + 1, Len(matriz(c)) - l)

                        Dim parametro As New ParameterField

                        Dim dVal As New ParameterDiscreteValue

                        parametro.ParameterFieldName = p1

                        dVal.Value = p2

                        parametro.CurrentValues.Add ( dVal )

                        parametros.Add (parametro)

                  End If

            Next

            Return (parametros)

      End Function

     

Private Shared Function logonrpt ( ByRef reporte As ReportDocument)

            Dim crtableLogoninfos As New TableLogOnInfos

            Dim crtableLogoninfo As New TableLogOnInfo

            Dim crConnectionInfo As New ConnectionInfo

            Dim CrTables As Tables

            Dim CrTable As Table

            crConnectionInfo = loginfo

            CrTables = reporte.Database.Tables

            For Each CrTable In CrTables

                  crtableLogoninfo = CrTable.LogOnInfo

                  crtableLogoninfo.ConnectionInfo = crConnectionInfo

                  CrTable.ApplyLogOnInfo (crtableLogoninfo)

            Next

      End Function

     

Public Overloads Shared Sub printrpt ( ByVal nombrereporte As String, ByVal ParamArray par() As String)

            Dim forma As New frmprint

            Dim rpt As New ReportDocument

            With forma.CrystalReportViewer1

                  If par.Length > 0 Then

                        .ParameterFieldInfo = genpar (par)

                  End If

                  If rutarpt.Trim.Length = 0 Then

                        rpt.Load (nombrereporte, OpenReportMethod.OpenReportByDefault)

                  ElseIf Mid(rutarpt.Trim, rutarpt.Trim.Length, 1) = "\" Then

                        rpt.Load (rutarpt & nombrereporte, OpenReportMethod.OpenReportByDefault)

                  Else

                        rpt.Load (rutarpt & "\" & nombrereporte, OpenReportMethod.OpenReportByDefault)

                  End If

            logonrpt (rpt)

          'Configurar aquí cualquier opción de exportación

            Dim opt As New ExportOptions

           opt = rpt.ExportOptions

          'Configurar aquí cualquier opción de impresión

           Dim prn As PrintOptions

            prn = rpt.PrintOptions

           .ReportSource = rpt

          'Visualizar el reporte en una ventana nueva

            forma.Text = custTitle

            forma.Show ()

        End With

    End Sub

 

    Public Overloads Shared Sub printrpt ( ByVal nombrereporte As String)

        Dim forma As New frmprint

        Dim rpt As New ReportDocument

        With forma.CrystalReportViewer1

            If rutarpt.Trim.Length = 0 Then

                rpt.Load (nombrereporte, OpenReportMethod.OpenReportByDefault)

            ElseIf Mid(rutarpt.Trim, rutarpt.Trim.Length, 1) = "\" Then

                rpt.Load (rutarpt & nombrereporte, OpenReportMethod.OpenReportByDefault)

            Else

                rpt.Load (rutarpt & "\" & nombrereporte, OpenReportMethod.OpenReportByDefault)

            End If

            logonrpt (rpt)

            'Configurar aquí cualquier opción de exportación

            Dim opt As New ExportOptions

            opt = rpt.ExportOptions

            'Configurar aquí cualquier opción de impresión

            Dim prn As PrintOptions

            prn = rpt.PrintOptions

            .ReportSource = rpt

            forma.Show ()

        End With

    End Sub

End Class

 

La forma de utilizarla es la siguiente:

1)     Invocar la rutina conectar utilizando los parámetros de esta forma:  CR.conectar(SERVIDOR, BASEDATOS, USUARIO, PASSWORD)

2)     Especificar la ruta a utilizar para abrir el reporte fijando CR.RPT = Ruta de los reportes

3)     Llamar a la rutina CR.printrpt, de cualquiera de las dos formas siguientes:

a)     Si el reporte no utiliza parámetros, solamente debe llamarse CR.printrpt(“reporte.rpt”)

b)     Si el reporte utiliza parámetros, llamarlo de esta forma: CR.printrpt (reporte.rpt”, “par1;valor”, “par2;valor”, “parN;valor”……)

Por ejemplo: CR.printrpt (reporte.rpt”, “year;2004”, “mes;10”)

Esto abrirá el reporte y le pasará los parámetros con los valores respectivos.

 


ir al índice