¿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 Namespace
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:
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 Namespace
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:
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 Namespace
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:
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