Reporte con multiples Datagridview no conectadas
Saludos programadores, aunque no es común ver 3 datagridview no conectadas en un mismo form, y menos aun todas estas pasadas aun mismo reporte en tablas reporte diferentes, no obstante no se exime que sea necesario.
La idea propuesta por un amigo....Saludos José!, creí que era mejor idea, si publicara el ejemplo, siendo asi y tomando como base el post(http://jossm03.blogspot.com/2015/08/reportviewer-con-datagridview-no.html) muestro la captura y los controles necesarios:
Como se habia propuesto en el ejemplo del post antes mencionado se tenia que almacenar temporalmente los valores del datagrid en un datatable, ahora se tenia que crear 3 datatables con los mismos campos(solo si los datagridview son iguales ), ademas 3 rutinas de almacenamiento, 3 rutinas para llenar los datagrids y 3 data para llenar las tablas del reporte, claro van incluidas los 3 tables dentro del reporte
Primero agregamos 3 datatables en el dataset1 para el almacenaje físico de los datos(claro que en el ejemplo base ya hay 1 solo harían las restantes).
Luego creamos los data dentro del reporte, entonces vamos al reporte ya creado (activar este menu haciendo click dentro del reporte y luego al menu ver)
Listo!, ahora los conjuntos de datos
y por ultimo las tablas en el reporte con referencia a cada conjunto de datos
Hacer la referencia a cada conjunto de datos
Antes de aceptar poner nombre al conjunto de datos, yo le puse como sigue = "Productos2" y asi sucesivamente para el 3
Con todo esto ya configurado veamos la codificación:
Imports Microsoft.Reporting.WinForms Public Class Form1 Dim fuente As New ReportDataSource Dim fuente2 As New ReportDataSource Dim fuente3 As New ReportDataSource Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click rellenargrid() rellenargrid2() rellenargrid3() 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 rellenargrid2() Try Dim filas As Integer = 1 grid2.Rows.Add(filas) Dim n As Integer = grid2.Rows.Count For i As Integer = 0 To n - 1 grid2.Item(0, i).Value = i + 1 grid2.Item(1, i).Value = "PRODUCTO" & (i + 1) grid2.Item(2, i).Value = Format((CDbl(CDbl((6.3 * Rnd()) + 1))), "0.00") grid2.Item(3, i).Value = i + 2 grid2.Item(4, i).Value = Format((grid2.Item(3, i).Value * grid2.Item(2, i).Value), "0.00") Next Catch ex As Exception End Try End Sub Sub rellenargrid3() Try Dim filas As Integer = 1 grid3.Rows.Add(filas) Dim n As Integer = grid3.Rows.Count For i As Integer = 0 To n - 1 grid3.Item(0, i).Value = i + 1 grid3.Item(1, i).Value = "PRODUCTO" & (i + 1) grid3.Item(2, i).Value = Format((CDbl(CDbl((6.3 * Rnd()) + 1))), "0.00") grid3.Item(3, i).Value = i + 2 grid3.Item(4, i).Value = Format((grid3.Item(3, i).Value * grid3.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) ' 'la cantidad de tablas en el reporte instanciadas ''---------------------PREPARAR REPORTE------------------ Catch ex As Exception End Try End Sub Sub Almacenar2() '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 grid2.Rows.Count - 1 dtw = ds.DataTable2.NewRow() dtw("n") = grid2.Item(0, i).Value dtw("Descripcion") = grid2.Item(1, i).Value dtw("Valor_Unitario") = Replace(CDbl(grid2.Item(2, i).Value), ",", ".") ' formato de punto para datatable dtw("Cantidad") = grid2.Item(3, i).Value dtw("Subtotal") = Replace(CDbl(grid2.Item(4, i).Value), ",", ".") 'formato de punto para datatable ds.DataTable2.Rows.Add(dtw) Next ''---------------------PREPARAR REPORTE-------------------- fuente2.Name = "Productos2" ' Nombre identico al que le di al dataset del report en tiempo de diseño fuente2.Value = ds.Tables(1) 'la cantidad de tablas en el reporte instanciadas ''---------------------PREPARAR REPORTE------------------ Catch ex As Exception End Try End Sub Sub Almacenar3() '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 grid3.Rows.Count - 1 dtw = ds.DataTable3.NewRow() dtw("n") = grid3.Item(0, i).Value dtw("Descripcion") = grid3.Item(1, i).Value dtw("Valor_Unitario") = Replace(CDbl(grid3.Item(2, i).Value), ",", ".") ' formato de punto para datatable dtw("Cantidad") = grid3.Item(3, i).Value dtw("Subtotal") = Replace(CDbl(grid3.Item(4, i).Value), ",", ".") 'formato de punto para datatable ds.DataTable3.Rows.Add(dtw) Next ''---------------------PREPARAR REPORTE-------------------- fuente3.Name = "Productos3" ' Nombre identico al que le di al dataset del report en tiempo de diseño fuente3.Value = ds.Tables(2) 'la cantidad de tablas en el reporte instanciadas ''---------------------PREPARAR REPORTE------------------ Catch ex As Exception End Try End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Almacenar() Almacenar2() Almacenar3() LLamarReporte() End Sub Sub LLamarReporte() Reporte.ReportViewer1.LocalReport.DataSources.Clear() Reporte.ReportViewer1.LocalReport.DataSources.Add(fuente) Reporte.ReportViewer1.LocalReport.DataSources.Add(fuente2) Reporte.ReportViewer1.LocalReport.DataSources.Add(fuente3) Reporte.ReportViewer1.LocalReport.ReportEmbeddedResource = "ReportViewer_Multiples_Datagridview.Fact.rdlc" 'exactamente como se llaman el proyecto y reporte Reporte.Show() End Sub End ClassAl final la captura ejecutando el reporte
Gracias a los que se suscriben a mi pagina para recibir nuevas publicaciones!!
Y espero que este ejemplo les haya sido de mucha utilidad les dejo el ejemplo en el link de abajo:
Comentarios
Publicar un comentario