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 ([email protected])

 


 

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