12 de diciembre de 2012

Pasar Parametros a Crystal Report

Algunas veces en nuestra aplicación de escritorio hay que pasar información(parametros) directamente desde el formulario(VB o C#)  hasta nuestro reporte, información que pueden variar en cada presentación de reporte y que el usuario debe especificar como por ejemplo el autor del reporte o simplemente notas especificas para cada reporte y que no se pueden obtener desde la base datos o con alguna formula elaborada, por eso muestro como pasar parametros desde el Windows Form hacia el Crystal Report.

Lo primero va ser crear el reporte, en caso no puedan hacerlo o quieran dar una revisada aquí hay un link en que muestro como hacerlo reporte !!!

Ahora, el ejemplo va para Visual Basic, mas abajo lo muestro para C# y lo primero que debemos hacer es ir a nuestro reporte y declarar un campo parametro del tipo Parameter Field desde el Field Explorer


Luego especificamos el nombre y tipo del parametro a enviar y luego le damos aceptar con lo que tendremos disponible el campo para colocarlo en cualquier parte del informe, en mi caso llame al parametro ejemplo y lo coloque en el pie del reporte:




y luego desde el Windows Form en VB ponemos este código:


Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
    Dim ds As New datos    <---- a="a" crea="crea" dataset="dataset" el="el" font="font" informe="informe" instancia="instancia" llenar="llenar" para="para" que="que" se="se">
    Dim rpt As New reporte   <---- a="a" crystal="crystal" el="el" instancia="instancia" report="report" span="span">

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Using Sql As New SqlConnection(My.Settings.pruebaConnectionString)
            Using da As New SqlDataAdapter("select * from empleado", Sql)
                da.Fill(ds, "empleado")
                rpt.SetDataSource(ds)
                rpt.SetParameterValue("ejemplo", "Hola Mundo")
                CrystalReportViewer1.ReportSource = rpt
            End Using
        End Using
    End Sub
End Class

Pero en caso quieras mandar un valor dentro de una variable, por ejemplo que capture la info desde un textbox para ser mostrado en el informe, haz esto:

Dim variable As String = "lo que quieras"
rpt.SetParameterValue("ejemplo", variable)



pero si lo quieren en C#, aqui esta:


using System.Data.SqlClient;
using System.Configuration;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        SqlConnection sql;
        SqlDataAdapter da;
        reporte rpt = new reporte();
        datos ds = new datos();
        string conexion = ConfigurationManager.ConnectionStrings["pruebaConnectionString"].ConnectionString;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            using (sql = new SqlConnection(conexion)) {
                using (da = new SqlDataAdapter("select * from empleado", sql)) {
                    da.Fill(ds, "empleado");
                    rpt.SetDataSource(ds);
                    rpt.SetParameterValue("ejemplo", "Hola mundo");
                    this.crystalReportViewer1.ReportSource = rpt;
                    this.ShowDialog();
                }
            }
        }
    }


y de nuevo las lineas para pasar el valor de una variable al reporte:


string variable = "Hola mundo";
rpt.SetParameterValue("ejemplo", variable);


es todo :)