Você está na página 1de 10

Informe en .NET con Crystal Reports y base de datos MySQL.

Usando XML
Se puede utilizar informes utilizando conectores, ODBC, que se tiene que instalar en cada
mquina apuntando hacia el servidor Mysql, en este manual se detallar como disear informes
utilizando XML, con .Net.
Vamos a crear informes a travs de un DataTable y de una estructura en un archivo XML.

Partiremos de una Base de datos y tabla diseada en MYSQL


Base Datos
Tabla

Contenido de la tabla: Datos

Paso 1. Creacin del archivo XML con la estructura de la tabla/vista.


Para nuestro ejemplo disearemos los siguientes objetos:
1)

Un formulario FORM1 donde tendremos el objeto visualizador de informes, con


CrystalReportViewer1.

FORM1

Reportviewer

Prof. Vargas Bonilla Robert A.

2)

Crear una clase con el nombre de clsReportCreator que crearemos a continuacin.

Clase

Una vez creado la clase se debe de ingresar los cdigos o sentencias:


Comenzamos pues creando la clase clsReportCreator, que constar de un nico atributo (el
nombre de la tabla o vista), un mtodo constructor, un mtodo para cargar el DataTable
correspondiente y un ltimo mtodo para generar el archivo XML. El cdigo completo de
esta clase es el siguiente:
Importar el espacio de trabajo:
Imports MySql.Data.MySqlClient
'---------------------------------------------------------------REM creando una variable con los atributos
Private TableOrView As String
'---------------------------------------------------------------REM Construccin del mtodo TableOrView
Public Sub New(ByVal TableOrView As String)
Me.TableOrView = TableOrView
End Sub
'---------------------------------------------------------------'Retornando DataTable correspondiente a TableOrView a travs de una funcin.
Public Function GetDataTable() As DataTable
Dim da As MySqlDataAdapter
Dim ds As New DataSet
Dim dt As DataTable
Dim ConnectionString As String
Dim SQL As String
REM fijando la connexion hacia MySQL y base de datos.
ConnectionString = "Database = bonilla; Data Source = localhost;
User ID = root; Password ="
'Creando el sql.
SQL = "SELECT * FROM " & Me.TableOrView
'conseguir eldata y rellenado el DataSet y DataTable.
da = New MySqlDataAdapter(SQL, ConnectionString)
da.Fill(ds, Me.TableOrView)
dt = ds.Tables(Me.TableOrView)
'Retornado el DataTable en la variable DT.
Return dt
End Function
' Creando el archivo XML file en una ruta especificada.
'---------------------------------------------------------------Public Sub CreateXMLFile(ByVal FilePath As String)
Dim DT As DataTable
'Creando DataTable.
DT = Me.GetDataTable()
'escribiendo archivo XML file en ruta especificada.
DT.WriteXmlSchema(FilePath & Me.TableOrView & ".xml")
End Sub

************ Fin de la clase ***************


Prof. Vargas Bonilla Robert A.

Y ahora nos vamos al formulario FORM1 para incluir el siguiente cdigo por el momento
(despus cambiar un poco) ser el que sigue:
Importar los siguientes espacios de trabajo
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data
Imports MySql.Data.MySqlClient
Public Class Form1
'--------------------------------------------------------------------------Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Rem creando archivo XML por primera vez
Dim RC As New clsReportCreator("datos")
RC.CreateXMLFile("C:\")
End Sub
End Class

Con esto tenemos una primera aplicacin que al ejecutarla nos crear el archivo
C:\datos.xml con la estructura de tabla datos. Lo probamos pues y obtenemos el archivo
XML.

Paso 2. Creacin del informe e insercin del origen de datos.

Aadimos al proyecto un informe al que llamaremos CrystalReport1.rpt y que


crearemos seleccionando la alternativa.

2. Clic Nuevo
elemento

Prof. Vargas Bonilla Robert A.

1. Clic Derecho

Aqu seleccionamos Reporting y marcamos Crystal Reports

3. Clic
2. Clic

Nombre reporte

1. Clic

En esta parte seleccionamos Como informe en blanco y por tanto desestimando


plantillas.

Prof. Vargas Bonilla Robert A.

A continuacin en el men Explorador de


campos seleccionamos la primera opcin Campos de
base de datos y en su men contextual hacemos click
en la opcin Asistente de base de datos.

En el men que se despliega (Orgenes de datos


disponibles) seleccionamos Crear nueva conexin y a
continuacin la opcin ADO.NET.

Con esto se nos abrir un nuevo formulario en el que nos solicitar la Ruta del archivo.
Debemos aqu ir a buscar el archivo XML que hemos creado anteriormente (en mi caso el
C:\datos.xml) y acto seguido pulsar en Finalizar. Con ello, en el men anterior (Orgenes de
datos disponibles) se nos mostrar ya la opcin NewDataSet incluyendo datos que
acabamos de aadir.

Lo marcamos y le damos al botn para trasladarlo al men de Tablas seleccionadas y


pulsamos en Aceptar.

Prof. Vargas Bonilla Robert A.

Con esto hemos conseguido que en el men Explorador de campos nos aparezca ya la
estructura de tabla datos con sus campos, tal como se muestra a continuacin:

Paso 3. Diseo del informe.


No tiene ningn misterio. Se trata de aadir los campos desde el men Explorador de
campos donde corresponda, insertarle los objetos de texto que nos parezcan adecuados, los
totales cuando sea preciso, dar formato a los textos, incorporar imgenes, etc.
En esta parte del reporte est dividido con secciones que a continuacin se detalla:

Seccin Encabezado del informe: Aqu colocar el encabezado del informe, que saldr
solo en le primera pgina

Seccin Encabezado de pgina: En esta pgina colocar el encabezado que saldr en toda
la pgina.

Seccin Detalles: Aqu colocar los campos de la tabla a mostrar.

Seccin pie de informe: El pie de pgina es aquel que va a salir en todas las hojas.

Seccin de pie de pgina: Aqu solo saldr en la ltima hoja del informe.

Aparecern otras secciones segn el modelo del informe.

Prof. Vargas Bonilla Robert A.

Paso 4. ltimo paso para obtener el informe


Por ltimo vamos a crear el cdigo que falta. Para ello en el formulario FORM1 donde
hemos aadido el objeto de tipo CrystalReportViewer al que hemos llamado
CrystalReportViewer1. Y modificamos el cdigo del FORM1 para dejarlo como sigue:
'---------------------------------------------------------------------------

Importar los espacios de trabajo


Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data
Imports MySql.Data.MySqlClient
Public Class Form1
'--------------------------------------------------------------------------Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim RC As New clsReportCreator("datos")
REM desactivando esta linea de codigo
REM RC.CreateXMLFile("C:\")

Esta lnea la desactivamos, que


anteriormente hemos digitado

'Creando el reporte
Dim RD As ReportDocument = New CrystalReport1()
'Fijando el data source para el reporte.
Dim DT As DataTable = RC.GetDataTable()
RD.SetDataSource(DT)
'Fijando data source para posible sub reportes.
For Each SR As ReportDocument In RD.Subreports
If SR.Database.Tables.Count > 0 Then
SR.SetDataSource(DT)
End If
Next
Me.CrystalReportViewer1.ReportSource = RD
End Sub
End Class

El cdigo anterior esta modificado y ntese como trabaja el archivo XML que creamos el
anteriormente, puesto que slo necesitamos crearlo una nica vez para luego poder generar el
origen de datos.
Pero a partir de aqu no necesitaremos andar crendolo cada vez.
Ejecutamos nuevamente la aplicacin y obtenemos el informe con los datos que queramos:

Todos los pasos anteriores son las formas bsicas para crear el informe

Prof. Vargas Bonilla Robert A.

Filtrar o clasificar datos en CrystalReport


Si queremos filtar datos podemos hacer de la siguiente manera:
Primero:
Desde otro formulario se debe de seleccionar datos como por ejemplo fecha, y esto se
debera hacer de la siguiente manera: en el FORM1 se debe de editar:

Utilizamos el Objeto DataView para filtrar en el FORM1:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
Dim RC As New clsReportCreator("datos")
REM desactivando esta linea de codigo
REM RC.CreateXMLFile("C:\")
'Creando el reporte.
Dim RD As ReportDocument = New CrystalReport1()
'Fijando el data source para el reporte en dataview
Dim Dv As DataView = My.Forms.Form2.dv
RD.SetDataSource(Dv)
'Setting data source for possible subreports.
For Each SR As ReportDocument In RD.Subreports
If SR.Database.Tables.Count > 0 Then
SR.SetDataSource(Dv)
End If
Next
Me.CrystalReportViewer1.ReportSource = RD
End Sub

En esta parte de la lnea


lo cambiamos utilizando
el DATAVIEW

Aqu tambin lo
cambiamos

En el siguiente cdigo usaremos RecordSelectionFormula de crystalreport :

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
Dim RC As New clsReportCreator("datos")
REM desactivando esta linea de codigo
REM RC.CreateXMLFile("C:\")
'Creando el reporte.
Dim RD As ReportDocument = New CrystalReport1()
'Fijando el

data source para el reporte en dataview

Dim DT As DataTable = RC.GetDataTable()


RD.SetDataSource(DT)
'Setting data source for possible subreports.
For Each SR As ReportDocument In RD.Subreports
If SR.Database.Tables.Count > 0 Then
SR.SetDataSource(DT)
End If
Next

Incrementamos el
cdigo siguiente

'Antes se debe de hacer la siguiente lnea de cdigo.


RD.RecordSelectionFormula = "{datos.nombre} = '" &
My.Forms.Form2.TextBox1.Text & "'"
Me.CrystalReportViewer1.ReportSource = RD
End Sub

**** FIN DEL TUTORIAL****


Prof. Vargas Bonilla Robert A.

Nota: Para activar los controles de CrystalReportViewer1, seguir los siguientes pasos:
1. Ingresar a propiedades del proyecto y ubicarnos en COMPILAR, hacer click en
opciones de compilacin avanzada. (Antes se debe de guardar el proyecto)

1. Click

2. Click

Aqui se deb de selecionar Net framework 4

Seleccionar Net FrameWork 4

Prof. Vargas Bonilla Robert A.

Ahora si se visualiza los objetos a utilizar

Nota 2: Si el informe no muestra en porque se debe de editar el app.config


<startup useLegacyV2RuntimeActivationPolicy="true"> </startup>

Copiar y pegar en esta


parte la sentencia

Cuando no muestra el reporte con recordselectionformula se debe de configurar lo siguiente


1. Clic en mostrar todos los archivos

2. Clic
3. Doble Clic

Private Sub InitializeComponent()


Me.CrystalReportViewer1 = New CrystalDecisions.Windows.Forms.CrystalReportViewer()
Me.CrystalReport11 = New WindowsApplication1.CrystalReport1()
Me.SuspendLayout()
Eliminar o borrar esta
'
Lnea colocando rem
'CrystalReportViewer1
'
Me.CrystalReportViewer1.ActiveViewIndex = -1
Me.CrystalReportViewer1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.CrystalReportViewer1.Cursor = System.Windows.Forms.Cursors.Default
Me.CrystalReportViewer1.Dock = System.Windows.Forms.DockStyle.Fill
Me.CrystalReportViewer1.Location = New System.Drawing.Point(0, 0)
Me.CrystalReportViewer1.Name = "CrystalReportViewer1"
REM Me.CrystalReportViewer1.SelectionFormula = ""
Me.CrystalReportViewer1.Size = New System.Drawing.Size(497, 367)
Me.CrystalReportViewer1.TabIndex = 0

Prof. Vargas Bonilla Robert A.

10

Você também pode gostar