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 ClassEn 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...