seleccionen el control "CrystalReportViewer1" y realizen lo siguiente:
Passo 1: esta es una etiqueta inteligente donde podemos ver muchas opciones el cual nosotros seleccionaremos el que dice "Chose a Crystal Report", luegoPaso 2: seleccionaremos que reporte se enlazara con este formulario o este "CrystalReportViewer1", en si en un solo visor se pueden temer a varios reportes enlazados la idea solo es por codigo seleccionar que reporte sera mostrado.
Luego entraremos a la base de datos, en este caso trabajamos con : "AdventureWorks"
trabajaremos con la tabla "Product", creen el siguiente procedimiento almacenado:
create procedure consulta_Producto(@Name nvarchar(50), @ProductNumber nvarchar(25))
As
Begin
Select ProductID, Name, ProductNumber From Production.Product
Where Name Like '%' + @Name + '%' And
ProductNumber like '%' + @ProductNumber + '%'
End
Go
ahora entraremos a las clases, en la clase producto realizar el siguiente codigo:
Namespace BLL
Public Class Producto
Private fProductID As Integer
Public Property ProductID() As Integer
Get
Return fProductID
End Get
Set(ByVal value As Integer)
fProductID = value
End Set
End Property
Private fName As String
Public Property Name() As String
Get
Return fName
End Get
Set(ByVal value As String)
fName = value
End Set
End Property
Private fProductNumber As String
Public Property ProductNumber() As String
Get Return fProductNumber
End Get
Set(ByVal value As String)
fProductNumber = value
End Set
End Property
End Class
End Namespace
en la clase producto realizar el siguiente codigo:
Imports System.Data.SqlClient
Imports ReportesCrystal.BLL
Namespace DAL
Public Class Procesos
Public Function BuscarCliente(ByVal clsProducto As BLL.Producto, ByVal ocn As String) As List(Of Producto)
Try
Using cn As New SqlConnection(ocn)
Dim cmd As New SqlCommand("consulta_Producto", cn)
cmd.CommandType = CommandType.StoredProcedure
Dim Parametros() As SqlParameter = {New SqlParameter, New SqlParameter}
With Parametros(0)
.ParameterName = "@Name"
.DbType = DbType.String
.Size = 50
.Value = clsProducto.Name
End With
With Parametros(1)
.ParameterName = "@ProductNumber"
.DbType = DbType.String
.Size = 25
.Value = clsProducto.ProductNumber
End With
For pPar As Integer = 0 To 1
cmd.Parameters.Add(Parametros(pPar))
Next
cn.Open()
Dim oReader As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection And CommandBehavior.SingleRow)
Dim lProducto As New List(Of Producto)
Dim cProducto As Producto
If oReader.Read Then
While oReader.Read
cProducto = New Producto
With cProducto
.ProductID = oReader(0)
.Name = oReader(1)
.ProductNumber = oReader(2)
lProducto.Add(cProducto)
End With
End While
End If
Return lProducto
End Using
Catch ex As Exception
Return Nothing
End Try
End Function
End Class
End Namespace
en el Setting del proyecto ingresara algunos parametros como se muestra en la siguiente imagen esto es para la conexion a la base de datos:
ahora en el formulario que tiene como nombre Reporteador ingresara el siguiente codigo:
Public Class frmReporteador
Public Ocn As String
Public olstProd As New List(Of BLL.Producto)
Public Function CadenaConecion() As String
Try
Dim Conexion As String = "Data Source=" & My.Settings.DataSource & _
";Initial Catalog=" & My.Settings.BaseDatos & _
";User ID=" & My.Settings.usuario & _
";Password=" & My.Settings.password
Return Conexion
Catch ex As Exception
Return Nothing
End Try
End Function
Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar.Click
Dim oProduct As New BLL.Producto
With oProduct
.Name = txtProductos.Text.Trim
.ProductNumber = txtSerie.Text.Trim
End With
Dim oProc As New DAL.Procesos
olstProd = oProc.BuscarCliente(oProduct, Ocn)
dtgProductos.DataSource = olstProd
End Sub
Private Sub Reporteador_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Ocn = CadenaConecion()
End Sub
Private Sub ImprimirResultadoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImprimirResultadoToolStripMenuItem.Click
Dim ReporteProd As New rptProducto
ReporteProd.SetDataSource(olstProd)
Visor.CrystalReportViewer1.ReportSource = ReporteProd
Visor.ShowDialog()
End Sub
Private Sub dtgProductos_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dtgProductos.MouseDown
If e.Button = Windows.Forms.MouseButtons.Right Then
With dtgProductos
Dim hti As DataGridView.HitTestInfo = .HitTest(e.X, e.Y)
If hti.Type = DataGridViewHitTestType.Cell Then
.CurrentCell = .Rows(hti.RowIndex).Cells(hti.ColumnIndex)
End If
End With
End If
End Sub
End Class
me olvidaba al proyecto tienen que agregarle tambien algunos controlcitos mas que son los siguientes...
Cuando ejecuten el resultado deveria ser:
el resultado del reporte luego de "Imprimir resultado".Espero les haya sido de utilidad.
Atentamente se despide,
Victor Yucra
Desarrollador de Software