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
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 ClassMis capturas
Y es todo, espero sus comentarios o preguntas.
Mi ejemplo: https://mega.nz/#!tEtiBAJJ!D8cQF5jr1PD7QIABtg76S5kKlGfjVAEB7P_kfbE5XUI














Este comentario ha sido eliminado por el autor.
ResponderEliminarMUCHAS GRACIAS POR TU CÓDIGO , ESTA MUY BUENO.
ResponderEliminarME GUSTARIA SABER SI FUNCIONARIA CON MI CODIGO. TENGO UN FORMULARIO CONECTADO A UN ARCHIVO TXT. TE AGRADECERIA MUCHO LA AYUDA
Gracias amigo es el único ejemplo que me pudo resolver el problema de imprimir desde reportviewer.
ResponderEliminarSaludos...