miércoles, 13 de febrero de 2008

CrystalReports

Hace un tiempo me preguntaba como mostrar un Reporte de CrystalReports pero que este se actualizara de acuerdo al Contenido de un DataSet, bien, pues aqui un sencillo ejemplo:

'Obviamente primero deben crear su Reporte en Crystal, ok
'Declaramos una variable local instanciada con el Nombte del Reporte Creado
Dim Report As New Reporte_Ventas

'oConn es un objeto de la Clase CReport, dicha Clase se conecta a la Base de Datos SQL_Server
'(la anexare mas abajo)
Dim oConn As New CReport

'Este DataSet estara vinculado al reporte, para muestre el resultado de la consulta
Dim dsConn As New DataSet

'Mi variable de error
Dim strError As String = ""

'Ahora mi DataSet local se llenara con el resultado de la consulta en la Base de Datos
'SP_Report es un procedimiento almacenado en la base de datos
'Obviamente tambien puediera ser una consulta SQL
dsConn = oConn.Reporte("SP_REPORT", strError)
If strError = "" Then
Report.Load(RutaReporte & "Reporte2.rpt") 'Aqui vinculamos la Ruta fisica del reporte
Report.SetDataSource(dsConn.Tables("TB_REPORTE")) 'Vinculamos los datos a mostrar
'con el resultado de la consulta en el DataSet, aqui algo importante, el nombre de la tabla
'en el DataSet, debe coincidir con la tabla utilizada en el reporte
Report.SetDatabaseLogon(User, Pwd, server, basedatos) 'Aqui se controla el acceso a la
'Base de Datos, usuario, password, servidor y nombre de la base de datos usada
Report.SetParameterValue(0, Nombre) 'En caso de que el reporte incluya parametros,
'asi les pasamos el valor a mostrar

'Nuestro Formulario debe incluir el CrystalReportViewer para visualizarlo
CrystalReportViewer1.DisplayGroupTree = False
CrystalReportViewer1.ReportSource = Report

'O si lo queremos imprimir directo, seria:
CrystalReportViewer1.PrintReport
Else
MsgBox(strError)
End If


Codigo de la Clase CReport

Imports System.Data.SqlClient
Imports Microsoft.VisualBasic

Public Class CReport

Private strConx As String

Public Sub New()
strConx = Data Source=HCANOS\SQL_2005;Initial catalog=sistema;password=0000;persist security info=True;user id=sa;Max Pool Size=2000;packet size=4096
End Sub

Public Function Reporte(ByVal pStoreProcedure, ByRef pError) As Data.DataSet

Dim objConn As New SqlConnection

objConn.ConnectionString = strConx

Dim objCmd As New SqlCommand
objCmd.CommandType = Data.CommandType.StoredProcedure
objCmd.Connection = objConn
objCmd.CommandText = pStoreProcedure


Dim daAdapter As New SqlDataAdapter
daAdapter.SelectCommand = objCmd
Dim dsDatos As New Data.DataSet

Try

daAdapter.Fill(dsDatos, "TB_REPORTE")
Return dsDatos
Catch e As SqlException
pError = "Error:" & e.Message & " en " & e.Source
Catch e As Exception
pError = "Error:" & e.Message & " en " & e.Source
Finally
objCmd.Dispose()
objConn.Dispose()
End Try

End Function


End Class

Cualquier duda, dejen su comentario!!!

Sencilla ProgressBar con C#

using System ; using System . Threading ; namespace app1 { class Program { static void Main ( string [ ] args ) ...