¿Cómo hacer un informe sin usar Crystal Reports?
Gran expertos mi saludo y agradecerte tu ayuda tan urgente, estoy haciendo un proyectito de visual basic 2005, qe se conecta a mysql 5, tengo mis forms, ahora quiero hacer mis reportes no se si esta version viene el datareport como basic 6.0 creo qe no, la idea es qe no quiero hacerlo con cristal porqe casi nunca lo use, pero aqui encontre el control reportwiever no si es del mismo cristal report o es otro individual para hacerlo.
1 Respuesta
Respuesta de darkastaroth
1
1
darkastaroth, tengo lo basico en desarrollo de sistemas informaticos en VB y CSharp
Huy!, mira la vdd si se puede hacer con el ReportViewer, y yo los se hacer inlcuso sin la llamada al servidor de reportes de ReportingServices, es decir, todo queda en tu aplicacion, pero es mucha talacha, te puedo pasar un ejemplo que tengo en VB.net para que lo revises, mi correo es [email protected]
muchas gracias experto por tu ayuda este es mi email: [email protected], haber si me envias ese ejemplito qe tienes muchas gracias
Espero te sirva, analizalo muy bien, no se entiende a la primera, dimelo a mi, pero con la actitud adecuada se logran las cosas, si tienes alguna duda hazmelo saber, no tengo mucho tiempo libre pero seguro te podré responder asi como aquellos que les sirva esta información.
Ejemplo reporte con clases y objetos como origen de datos:
Creas un Nuevo Proyecto del Tipo Biblioteca de Clases en el cual vas a generar tantas clases como necesites, para un solo reporte se necesitas 2 clases, la primer clase es la que contendrá los campos de un solo registro es decir, cada registro de tu consulta lo convertirás en un nuevo objeto de esta clase, y mediante sus propiedades públicas de dicha clase iras diseñando el informe, aquí tienes el ejemplo de la primera clase:
Como podrás notar, es una clase que solo contiene propiedades públicas con sus respectivos bloques de set y get, la cantidad de propiedades públicas la determina el número de campos que contiene tu registro, con campos, me refiero a las columnas. Espero no tengas problemas con esto de las clases (de ser así te recomiendo que te leas algo sobre esto porque se te dificultara mas).
Yo tengo una clase base que tiene las variables que utilizo en todos mis reportes y es esta:
Como siguiente paso tenemos que Generar una clase que nos permitirá realizar la respectiva consulta a la Base de Datos para traer los registros que necesitemos y como te darás cuenta se hereda de la clase de arriba, eso solo es para evitarme la fatiga de repetir las mismas variables en cada clase como esta.
Ejemplo:
Como te podrás dar cuenta lo que hace la clase de arriba es realizar una consulta dentro de una función y a su vez recorre todos los resultados y por cada registro crea un nuevo objeto de la primera clase y una vez asignadas con un valor todas sus propiedades públicas, agrega ese objeto a una lista de objetos (List donde T es el tipo de dato, y el tipo de dato es el de tu primer clase).
Cuando tienes estas dos clases, le das un clic derecho al proyecto (en la ventana explorador de soluciones), limpias la solución y la vuelves a generar, si no te marca ningún error ve al menú datos y le das clic en la opción Agregar Nuevo Origen de Datos, y marcas la opción Objeto, le das siguiente y si todo lo anterior esta correcto, deberás ver los espacios de nombre que tienes en tu proyecto y todas las referencias, etc. etc. etc., como siguiente paso deberás elegir la clase que tiene definidas tus propiedades públicas, ya que ésta se convertirá en tu origen de datos le das siguiente y finalizar.
Ahora ya estás listo para diseñar el informe, esto se hace como en Reporting Services pero con algún par de limitaciones de las que ya te estaras danto cuenta, agregas un nuevo archivo del tipo informe, ya que estés en el diseño del informe, veras que tu origen de datos es tu propia clase si te preguntas y cómo demonios trae datos si solo está definiendo los campos de cada registro, ahhh, yo me hice la misma pregunta no desesperes, Arrastra campos, dale formato y haz lo que tengas que hacer con el diseño una vez que ya lo tienes agrega un Formulario en tu proyecto, y en él un control ReportViewer, el cual lo ligaras a tu informe diseñado por medio de un triangulito que aparece en la parte superior derecha del control, una vez hecho esto, en el evento load de tu form tener este código:
Y como te daras cuenta lo unico que se hace es en la Propiedad DataSource del BindingSource, que se crea automaticamente al ligar el informe con el ReportViewer, es asignar la funcion que reliza la consulta la cual devuelve un listado de objetos, que analogicamente es como una Tabla, solo que cada registro esta compuesto por un objeto y a su vez estos objetos contenidos en una Listgado generico, el cual se utiliza como origen de datos, por medio del BindingSource, eso es todo
Ejemplo reporte con clases y objetos como origen de datos:
Creas un Nuevo Proyecto del Tipo Biblioteca de Clases en el cual vas a generar tantas clases como necesites, para un solo reporte se necesitas 2 clases, la primer clase es la que contendrá los campos de un solo registro es decir, cada registro de tu consulta lo convertirás en un nuevo objeto de esta clase, y mediante sus propiedades públicas de dicha clase iras diseñando el informe, aquí tienes el ejemplo de la primera clase:
Namespace clasesReportes
Public Class cRegCatalogo
Private _Id As Integer
Private _DCorta As String
Private _DLarga As String
Private _Nombre As String
Public Property ID() As Integer
Get
Return _Id
End Get
Set(ByVal value As Integer)
_Id = value
End Set
End Property
Public Property DCorta() As String
Get
Return _DCorta
End Get
Set(ByVal value As String)
_DCorta = value
End Set
End Property
Public Property DLarga() As String
Get
Return _DLarga
End Get
Set(ByVal value As String)
_DLarga = value
End Set
End Property
Public Property Nombre() As String
Get
Return _Nombre
End Get
Set(ByVal value As String)
_Nombre = value
End Set
End Property
End Class
End NamespaceComo podrás notar, es una clase que solo contiene propiedades públicas con sus respectivos bloques de set y get, la cantidad de propiedades públicas la determina el número de campos que contiene tu registro, con campos, me refiero a las columnas. Espero no tengas problemas con esto de las clases (de ser así te recomiendo que te leas algo sobre esto porque se te dificultara mas).
Yo tengo una clase base que tiene las variables que utilizo en todos mis reportes y es esta:
Imports System.Data.SqlClient
Namespace clasesReportes
Public Class ClaseBaseReportes
Friend strConexion As String
Friend sqlConx As New SqlConnection
Friend lstrConnString As String
Friend lsqlCmd As New SqlCommand
Friend lsqlAdapter As SqlDataAdapter
Friend lsqlDataTable As New DataTable
Friend lstrSelectCmd As String
Friend lsqlDataRow As DataRow
End Class
End NamespaceComo siguiente paso tenemos que Generar una clase que nos permitirá realizar la respectiva consulta a la Base de Datos para traer los registros que necesitemos y como te darás cuenta se hereda de la clase de arriba, eso solo es para evitarme la fatiga de repetir las mismas variables en cada clase como esta.
Ejemplo:
Imports System.Data.SqlClient
Namespace clasesReportes
Public Class cDsCatalogo Inherits ClaseBaseReportes
Private _Tabla As String
Private _nombre As String
Private lstCatalogo As List(Of cRegCatalogo)
Public Sub New(ByVal strTabla As String, ByVal nombre As String)
_Tabla = strTabla
_nombre = nombre
End Sub
Public Function GetCatalogo() As List(Of cRegCatalogo)
Dim lRegCatalogo As cRegCatalogo
Try
lstCatalogo = New List(Of cRegCatalogo)
lstrConnString = strConexion
sqlConx.ConnectionString = lstrConnString
sqlConx.Open()
lstrSelectCmd = "SELECT * FROM " & _Tabla & " WHERE SitReg='A'"
lsqlAdapter = New SqlDataAdapter(lstrSelectCmd, sqlConx)
lsqlAdapter.Fill(lsqlDataTable)
If lsqlDataTable.Rows.Count > 0 Then
For Each lsqlDataRow In lsqlDataTable.Rows
lRegCatalogo = New cRegCatalogo
With lRegCatalogo
.ID = IIf(IsDBNull(lsqlDataRow("ID")), "", lsqlDataRow("ID"))
.DCorta = IIf(IsDBNull(lsqlDataRow("DCorta")), "", lsqlDataRow("DCorta"))
.DLarga = IIf(IsDBNull(lsqlDataRow("DLarga")), "", lsqlDataRow("DLarga"))
.Nombre = _nombre
End With
lstCatalogo.Add(lRegCatalogo)
Next
End If
Catch ex As Exception
MsgBox(ex.Message)
'Throw ex
Finally
If sqlConx.State = ConnectionState.Open Then
sqlConx.Close()
End If
End Try
Return lstCatalogo
End Function
End Class
End NamespaceComo te podrás dar cuenta lo que hace la clase de arriba es realizar una consulta dentro de una función y a su vez recorre todos los resultados y por cada registro crea un nuevo objeto de la primera clase y una vez asignadas con un valor todas sus propiedades públicas, agrega ese objeto a una lista de objetos (List donde T es el tipo de dato, y el tipo de dato es el de tu primer clase).
Cuando tienes estas dos clases, le das un clic derecho al proyecto (en la ventana explorador de soluciones), limpias la solución y la vuelves a generar, si no te marca ningún error ve al menú datos y le das clic en la opción Agregar Nuevo Origen de Datos, y marcas la opción Objeto, le das siguiente y si todo lo anterior esta correcto, deberás ver los espacios de nombre que tienes en tu proyecto y todas las referencias, etc. etc. etc., como siguiente paso deberás elegir la clase que tiene definidas tus propiedades públicas, ya que ésta se convertirá en tu origen de datos le das siguiente y finalizar.
Ahora ya estás listo para diseñar el informe, esto se hace como en Reporting Services pero con algún par de limitaciones de las que ya te estaras danto cuenta, agregas un nuevo archivo del tipo informe, ya que estés en el diseño del informe, veras que tu origen de datos es tu propia clase si te preguntas y cómo demonios trae datos si solo está definiendo los campos de cada registro, ahhh, yo me hice la misma pregunta no desesperes, Arrastra campos, dale formato y haz lo que tengas que hacer con el diseño una vez que ya lo tienes agrega un Formulario en tu proyecto, y en él un control ReportViewer, el cual lo ligaras a tu informe diseñado por medio de un triangulito que aparece en la parte superior derecha del control, una vez hecho esto, en el evento load de tu form tener este código:
Dim objDsCCausaCancela As New cDsCatalogo("Jur.CEstatus", "Estatus")
objDsCCausaCancela.strConexion = Conex
Me.cRegCatalogoBindingSource.DataSource = objDsCCausaCancela.GetCatalogo()
Me. ReportViewer1. RefreshReport()Y como te daras cuenta lo unico que se hace es en la Propiedad DataSource del BindingSource, que se crea automaticamente al ligar el informe con el ReportViewer, es asignar la funcion que reliza la consulta la cual devuelve un listado de objetos, que analogicamente es como una Tabla, solo que cada registro esta compuesto por un objeto y a su vez estos objetos contenidos en una Listgado generico, el cual se utiliza como origen de datos, por medio del BindingSource, eso es todo
- Compartir respuesta
- Anónimo
ahora mismo