domingo, 26 de julio de 2015

ReportViewer con base de datos Sql Compact 4.0

Que tal amigos programadores, vamos a continuar del ejemplo mucho antes posteado:

http://jossm03.blogspot.com/2014/11/crear-y-conectar-base-de-datos.html

Ahora vamos a crear un Reporte ReportViewer  para poder ya sea exportar o imprimir nuestra factura, nota de venta, etc.

Partiendo con la base de datos,... bueno en realidad tiene 2 datos nada mas, jeje!, Uds pueden agregar muchos mas.
Comencemos agregando un...Conjunto de datos
La imagen es copiada del post anterior pero igual sirve,

Seguimos, agregamos un tabla de datos(haciendo clic derecho en la pantalla vacía que se presenta al crear el conjunto de datos, mostrado arriba). Yo le puse de nombre" dataprod"

Luego creamos columnas con nombres igual a los nombres de los campos contenidos en la tabla de la base de datos sql compact 4.0. Nos debe quedar así:


Cerramos esta ventana y ya puede verse en la ventana del explorador como en la imagen

Bueno ahora si vamos agregar a nuestro proyecto un form nuevo para contener el reporte, pueden hacer eso o pueden embeberlo(incrustarlo) en el form principal, es su elección, y como ya les dije para que se vea este control deben usar net framework 3.5 en este proyecto.

Yo elegí un nuevo form(cuadro de dialogo), e incruste el reporviewer de la paleta de controles y aplique la propiedad Dock = Fill para que rellene todo el form. Miren como queda:



He colocado un nuevo boton para llamar a mi reporte.



 Ahora vamos al diseño de reporte



Le puse de nombre "Reporteproductos"
Agregamos de la paleta de controles del reporte una tabla y seguimos como la demuestran las imágenes





Con algo de creatividad  nos quedaría el diseño algo así:


Por ultimo vamos a codificar:

Public Class Form1
    Imports Microsoft.Reporting.WinForms
Public Class Form1
    Dim fuente As New ReportDataSource
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnexam.Click
        Try
            Dim OpenFileDialog As New OpenFileDialog
            OpenFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
            OpenFileDialog.Filter = "Base de datos SqlServer Compact Edition 4.0 (*.sdf)|*.sdf|Todos los archivos (*.*)|*.*"
            If (OpenFileDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
                Dim FileName As String = OpenFileDialog.FileName
                lbldir.Text = FileName
                ' TODO: agregue código aquí para abrir el archivo.
            End If
        Catch ex As Exception
            MsgBox("error al abrir base de datos", vbCritical)
        End Try
        btnver.Enabled = True
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles btnver.Click
        cargar_productos()
    End Sub
    Sub cargar_productos()
        Try
            conectarse()
            Dim ds As New DataSet
            Dim dt As New DataTable
            Dim strSql As String = "SELECT  nombre_producto, valor_producto FROM productos "
            Dim adp As New SqlServerCe.SqlCeDataAdapter(strSql, conn)
            adp.Fill(dt)
         
            DataGridView1.DataSource = dt
            ds.Tables.Add("tabla")
            adp.Fill(ds.Tables("tabla"))
            ''---------------------PREPARAR REPORTE--------------------
            fuente.Name = "Productos" ' Nombre identico al que le di al dataset del report en tiempo de diseño
            fuente.Value = ds.Tables(0)
            ''---------------------PREPARAR REPORTE------------------
        Catch ex As Exception
            ex.ToString()
        End Try
        conn.Close()
    End Sub

    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
        Reporte.ReportViewer1.LocalReport.DataSources.Clear()
        Reporte.ReportViewer1.LocalReport.DataSources.Add(fuente)
        Reporte.ReportViewer1.LocalReport.ReportEmbeddedResource = "conexDbsqLcompaq.Reportproductos.rdlc" 'exactamente como se llaman el proyecto y reporte
        Reporte.Show()
    End Sub

End Class




En el form que contiene el reporte


Imports System.Windows.Forms
Imports Microsoft.Reporting.WinForms

Public Class Reporte
    Private Sub Reporte_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.ReportViewer1.RefreshReport()
        Me.ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)
        Me.ReportViewer1.ZoomMode = ZoomMode.Percent
        Me.ReportViewer1.ZoomPercent = 100
        '  Me.ReportViewer1.RefreshReport()
    End Sub
End Class

 
Mi captura



Y es todo. Nos vemos en otra entrega!