23 de noviembre de 2012

Resultados búsqueda en Crystal Report

Haremos un buscador de datos de un empleado y mostraremos los resultados en un reporte de Crystal Report, para esto utilizaremos VB2010 y la base de datos: empleado, la cual tiene los siguientes campos


el termino de búsqueda sera el código del empleado, el cual en mi caso tiene tres números y para realizar esta búsqueda haremos uso de un formulario el cual solo tiene un campo de texto y un botón  les deje los nombres por defecto a cada control(Form1, TextBox1 y Button1) pues lo importante es el funcionamiento, ustedes sabrán como darle una vista apropiada.


Ahora agreguemos un Dataset, para esto click derecho sobre el proyecto y seleccionamos dentro de la categoría Data al dataset y de nombre le dejamos Datos.xsd


y desde nuestro Server Explorer agregamos desde nuestra base de datos, la tabla empleado y guardamos


Ahora agregamos un reporte de Crystal Report, de nuevo click derecho sobre nuestro proyecto y agregamos un nuevo item


escogemos Crystal Report y de nombre le dejamos Reporte


Escogemos usar el asistente y seleccionamos el origen de datos, que sera la tabla empleado y todos los campos de esta tal como se muestra




Ahora agregamos un nuevo formulario al que llamare Show y sobre este agrego un control CrystalreportViewer, luego sobre el Form1, que es el que tiene el botón y la caja de texto, ponemos este código:

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim codigo As String = TextBox1.Text   'de aquí tomo el valor del código a buscar
        Dim ds As New Datos        'referencia al Dataset creado: Datos   
        Dim rpt As New Reporte     'referencia al reporte en Crystal Report
        Dim muestra As New Show    'nombre del formulario con el CrystalReportViewer
        Try
            Using Sql As New SqlConnection(My.Settings.cnn)  'cnn conexión en app.config
                Sql.Open()
                Using cmd As New SqlCommand()
                    cmd.Connection = Sql
                    cmd.CommandText = "select * from empleado where codigo=@codigo"  
                    cmd.Parameters.AddWithValue("@codigo", codigo) 
                    Using da As New SqlDataAdapter(cmd)  
                        da.Fill(ds, "busqueda")   
                        rpt.SetDataSource(ds.Tables("busqueda")) 
                        muestra.CrystalReportViewer1.ReportSource = rpt  
                        muestra.ShowDialog()  
                    End Using
                End Using
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

End Class


y solo ejecutamos, como ven toda la información se obtiene en Form1 y luego solo presentamos el Formulario show con el reporte.

************************************************************************************

PERO si lo que quieren es que el formulario que contenga el CrystalreportViewer sea el que haga la busqueda, pues hagamos esto en Form1

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim formulario As New Show
        formulario.buscar(TextBox1.Text)
        formulario.ShowDialog()
    End Sub

End Class


y en el formulario Show para que este realice la búsqueda, debemos poner esto:

Imports System.Data
Imports System.Data.SqlClient
Public Class Form2

    Public Sub buscar(ByVal codigo As String)
        Dim codigoB As String = codigo
        Dim ds As New Datos
        Dim rpt As New Reporte
        Try
            Using Sql As New SqlConnection(My.Settings.cnn)
                Sql.Open()
                Using cmd As New SqlCommand()
                    cmd.Connection = Sql
                    cmd.CommandText = "select * from empleado where codigo=@codigo"
                    cmd.Parameters.AddWithValue("@codigo", codigoB)
                    cmd.ExecuteNonQuery()
                    Using da As New SqlDataAdapter(cmd)
                        da.Fill(ds, "tblBusqueda")
                        rpt.SetDataSource(ds.Tables("tblBusqueda"))
                        CrystalReportViewer1.ReportSource = rpt
                    End Using
                End Using
            End Using
        Catch ex As Exception

        End Try
    End Sub
End Class

eso es todo :)