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

 Asignamos el Tablix al conjunto de datos siguiente y asi...




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 Class
Al 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

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic