ReportViewer con DatagridView No conectado

Como hecho en los post anteriores, hemos visto reportes con diferentes base de datos( Access, SqlCompact, etc.) en este caso haremos un ejemplo que no use base de datos, sino que partiendo de un DatagridView como tabla calculada nos haga el reporte con sus debidas operaciones.

Para esto he usado lo que esta visto en la siguiente figura:

El gráfico de la calculadora es gusto propio si quieres puedes colocar algo parecido, como puedes ver  debes crear las columnas vistas en el grid(DatagridView).

NOTA: recuerden se necesita Net.Framework 3.5 para habilitar reportes

Ahora vamos a crear el data que almacenará los datos del grid temporalmente:

Añadiremos un objeto xds(conjunto de datos).

Una vez ingresado, creamos el datatable y las columnas a usar para almacenar.



Una vez hecho esto nos disponemos a crear el reporte. Como visto antes en post anteriores seguimos el mismo procedimiento agregamos un reporte,  a mi reporte le puse de nombre Fact.rdlc


Luego de un poco de edición, lo deje así de sencillo:


Para  este reporte, use una tabla para mostrar los datos. Configurando el acceso de datos

Luego asignando las columnas

Para calcular la suma total de la factura agregamos un fila independiente por debajo


Vamos a configurar la celda donde se mostrar el resultado




La final nos quedara así:
En algunas ocasiones es mejor cambiar el formato de las celda con Cdbl para calcular.

Terminado todo esto  vamos a ver el código fuente:


Imports Microsoft.Reporting.WinForms
Public Class Form1
 Dim fuente As New ReportDataSource
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  rellenargrid()
 End Sub
 Sub rellenargrid()
  Try
   Dim filas As Integer = 1
   grid.Rows.Add(filas)
   Dim n As Integer = grid.Rows.Count
   For i As Integer = 0 To n - 1
    grid.Item(0, i).Value = i + 1
    grid.Item(1, i).Value = "PRODUCTO" & (i + 1)
    grid.Item(2, i).Value = Format((CDbl(CDbl((6.3 * Rnd()) + 1))), "0.00")
    grid.Item(3, i).Value = i + 2
    grid.Item(4, i).Value = Format((grid.Item(3, i).Value * grid.Item(2, i).Value), "0.00")
   Next
  Catch ex As Exception
  End Try
 End Sub
 Sub Almacenar() 'Almacena los datos presentados en el datagridview
        'instanciamos los objetos creados 
        Try
   Dim ds As New DataSet1
   Dim dtw As DataRow
   For i As Integer = 0 To grid.Rows.Count - 1
    dtw = ds.DataTable1.NewRow()
    dtw("n") = grid.Item(0, i).Value
    dtw("Descripcion") = grid.Item(1, i).Value
    dtw("Valor_Unitario") = Replace(CDbl(grid.Item(2, i).Value), ",", ".") ' formato de punto para datatable
    dtw("Cantidad") = grid.Item(3, i).Value
    dtw("Subtotal") = Replace(CDbl(grid.Item(4, i).Value), ",", ".") 'formato de punto para datatable
    ds.DataTable1.Rows.Add(dtw)
   Next
   ''---------------------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
  End Try
 End Sub
 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  Almacenar()
  LLamarReporte()
 End Sub
 Sub LLamarReporte()
  Reporte.ReportViewer1.LocalReport.DataSources.Clear()
  Reporte.ReportViewer1.LocalReport.DataSources.Add(fuente)
  Reporte.ReportViewer1.LocalReport.ReportEmbeddedResource = "DatagridviewNoconectado.Fact.rdlc" 'exactamente como se llaman el proyecto y reporte
        Reporte.Show()
 End Sub
End Class
En el form llamado reporte que contiene el reportviewer(visor)
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
	End Sub
End Class
Mis capturas



Y es todo, espero sus comentarios o preguntas.

Mi ejemplo: https://mega.nz/#!tEtiBAJJ!D8cQF5jr1PD7QIABtg76S5kKlGfjVAEB7P_kfbE5XUI


Comentarios

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. MUCHAS GRACIAS POR TU CÓDIGO , ESTA MUY BUENO.
    ME GUSTARIA SABER SI FUNCIONARIA CON MI CODIGO. TENGO UN FORMULARIO CONECTADO A UN ARCHIVO TXT. TE AGRADECERIA MUCHO LA AYUDA

    ResponderEliminar
  3. Gracias amigo es el único ejemplo que me pudo resolver el problema de imprimir desde reportviewer.
    Saludos...

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic