Crystal Reports con DataSet tipado

 

Vamos a crear un reporte con DataSet tipado, en su interior un DataTable, se usara una base de datos Access adjuntada al proyecto.

Una vez que tienen creado su proyecto y su conexión a la DB, pasaremos a crear el DataSet. Para esto se hace click derecho en el proyecto/Agregar/Nuevo elemento/Datos/Conjunto de datos. Ponen el nombre de su DataSet y listo.

Luego al DataSet le agrega un DataTable en el cual tiene que poner el nombre de la tabla que va obtener los datos, el nombre tiene que ser igual al nombre de la tabla que tiene en la DB, luego le agrega las columnas que va a consultar mediante la query.

dataset

Una vez obtenido nuestro DataSet, procedemos a crear el reporte, hacemos click derecho en el proyecto/Agregar/Nuevo elemento/Reporting/Crystal Reports. Ponen el nombre del reporte y tocaría darle la ruta donde se encuentra nuestro DataSet creado en el paso anterior.

Crystal

Crystal2

Ahora pasamos a armar el reporte de la siguiente manera se arrastra los campos que queremos mostrar en el reporte se colaca en la pate de detalles.

rpt

Ahora pasamos a codificar vamos a hacer la consulta SQL contra la DB.

using System.Text;
using System.Data;
using System.Data.OleDb;
using CristalReports.AccesoDatos;

namespace CristalReports.Reportes
{
    public class ClienteRepository
    {
        internal static dsClientes ObtenerClientes()
        {
            dsClientes _dsClientes = new dsClientes();
            using (OleDbConnection cn = Conexion.Conectar("NorthwindConnectionString"))
            {
                cn.Open();
                using (OleDbCommand cmd = cn.CreateCommand())
                {
                    cmd.CommandText = "SELECT Id, Nombre, Apellidos FROM Clientes";
                    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                    da.Fill(_dsClientes, "Clientes");
                }
            }
            return _dsClientes;
        }
    }
}

Imports System.Data
Imports System.Data.OleDb

Public Class ClienteRepository

    Friend Shared Function ObtenerClientes() As dsCliente
        Dim _DsClientes As New dsCliente()
        Using cn As OleDbConnection = Conexion.Conectar("NorthwindConnectionString")
            cn.Open()
            Using cmd As OleDbCommand = cn.CreateCommand()
                cmd.CommandText = "SELECT Id, Nombre, Apellidos FROM Clientes"
                Dim da As New OleDbDataAdapter(cmd)
                da.Fill(_DsClientes, "Clientes")
            End Using
        End Using
        Return _DsClientes
    End Function

End Class

Ahora implementamos al método ObtenerReporteCliente.

public class ClienteReporte
    {
        public static ReporteClientes ObtenerReporteCliente()
        {
            ReporteClientes reporte = new ReporteClientes();
            dsClientes cliente = ClienteRepository.ObtenerClientes();
            reporte.SetDataSource(cliente);
            return reporte;
        }
    }

Public Class ClienteReporte

    Public Shared Function ObtenerReporteCliente() As ReporteClientes
        Dim reporte As New ReporteClientes
        Dim cliente As dsCliente = ClienteRepository.ObtenerClientes()
        reporte.SetDataSource(cliente)
        Return reporte
    End Function
End Class

Ahora se agrega un formulario para colocar el CrystalReportViewer, que lo encuentra en el Toolbox en la sección Creación de informe. Preparamos el formulario.

using System.Text;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;

namespace CristalReports
{
    public partial class frmReporte : Form
    {
        private ReportClass report;
        public frmReporte()
        {
            InitializeComponent();
        }

        public frmReporte(ReportClass _report)
        {
            InitializeComponent();
            report = _report;
        }

        private void frmReporte_Load(object sender, EventArgs e)
        {
            this.crystalReportViewer1.ReportSource = report;
        }
    }
}

Imports CrystalDecisions.CrystalReports.Engine

Public Class frmReporte
    Dim report As ReportClass

    Public Sub New(_report As ReportClass)
        InitializeComponent()
        report = _report
    End Sub
    Private Sub frmReporte_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.CrystalReportViewer1.ReportSource = report
    End Sub
End Class

Por ultimo llamamos al reporte para su impresión.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CristalReports.Reportes;

namespace CristalReports
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
            ReporteClientes _reporte = ClienteReporte.ObtenerReporteCliente();
            frmReporte frm = new frmReporte(_reporte);
            frm.Show();
        }
    }
}

Public Class Form1

    Private Sub btnImprimir_Click(sender As System.Object, e As System.EventArgs) Handles btnImprimir.Click
        Dim _reporte As ReporteClientes = ClienteReporte.ObtenerReporteCliente()
        Dim frm As New frmReporte(_reporte)
        frm.Show()
    End Sub
End Class

 

El resultado sería el siguiente.

reporte

Descargar App C#   Descargar App VB

NOTA : Los proyectos están desarrollados en VS 2010, les aconsejo descargar la versión Express de VS 2012 Visual Studio 2012 Express ya que uso la versión 2012.

Anuncios

11 pensamientos en “Crystal Reports con DataSet tipado

  1. Cristian Freire

    saludos.
    tengo un problema necesito mostrar los id de unas habitaciones por tipo, por ejemplo mostrar todas las habitaciones encillas, las dobles, las triples cuando estas esten en estad disponible.

    al momento puedo mostrar las habitaciones por tipo pero no se como hacer el query para que me muestren las que estan en estado disponibles

    SELECT * FROM habitacion where tipo = ‘simple’,

    el problema se me da cuando hago lo siguiente
    SELECT * FROM habitacion where tipo = ‘simple’, estado = ‘false’

    Responder
    1. Pedro Ávila Núñez Autor de la entrada

      Hola Cristhian tu consulta quedaría algo como esto.

      SELECT A.nRegistro, A.nHabitacion, A.fechaIngreso, fechaSalida, H.tipo, A.estado
      FROM Almacenamiento AS A
      INNER JOIN Habitacion AS H
      ON A.nHabitacion = H.nHabitacion
      WHERE A.Estado = 1 AND H.tipo IN(‘simple’, ‘doble’, ‘triple’, ‘matrimonial’)

      Si el estado esta en 1 trae todas las habitaciones que esten ocupadas 2 reservadas, según como hayas analizado el negocio, esto ya es criterio tuyo.

      Responder
  2. James Tudor Claure

    Pedro ulices muy buen el material, pero me gustaría que subas un ejemplo en .NET, desde ya te lo agradezco. Saludos desde beni-bolivia, también me puedes enviar al correo jamestudor264@gmail.com información de reportes con cristall report con dataset MVC.

    Responder
  3. Oscar Torres

    Buen Día tengo una duda al crear un reporte en VB 2015 con crystal reports y un dataset al ejecutar el programa al momento de querer visualizar el reporte me pide un usuario y una contraseña y si le doy en cancelar no me muestra nada. Sabes a que se debe ese problema.

    Saludos.

    Responder
  4. Pedro Ávila Núñez Autor de la entrada

    Puedes hacer algo como esto.
    private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument rptDocument)
    {
    Tables myTables = rptDocument.Database.Tables;
    foreach (CrystalDecisions.CrystalReports.Engine.Table myTable in myTables)
    {
    TableLogOnInfo myTableLogonInfo = myTable.LogOnInfo;
    myTableLogonInfo.ConnectionInfo = connectionInfo;
    myTable.ApplyLogOnInfo(myTableLogonInfo);
    }
    }

    private void Imprimir()
    {

    DataTable tablaDatos = Pedido.DTProcesarRT(6, “”, “”, Helper.IdRows, “”, “”, “”, “”);

    rptListaPersonal.SetDataSource(tablaDatos);

    frmReportes frm = new frmReportes();

    frm.CrystalReportViewer.ReportSource = rptListaPersonal;
    frm.CrystalReportViewer.Dock = DockStyle.Fill;

    ConnectionInfo cn = new ConnectionInfo();
    cn.ServerName = “.”;
    cn.DatabaseName = “PrismaNvo”;
    cn.UserID = “sa”;
    cn.Password = “Admin123”;
    cn.Type = ConnectionInfoType.SQL;
    SetDBLogonForReport(cn, rptListaPersonal);
    frm.CrystalReportViewer.Refresh();
    frm.Text = “Probando”;
    frm.Show();
    }

    Responder

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s