none
Traer datos para un Report RRS feed

  • Pregunta

  • Hola, tengo un dataset el cual lleva los datos del datagrid para su posterior impresión.

    Tengo esta función pero al momento de leer los valores del datagrid me los saltea yendo a "Preparar reporte"

    Porque podría ser?El Dataset llega vacio o esta mal conectado? si es necesario puedo adjuntar cualquier cosa que sea necesaria si no se llega a comprender.

    Tengo una tabla donde quiero mostrar los valores, la cual la propiedad "DataSetName" esta seleccionado el DataSet

            

     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 DataGridView2.Rows.Count - 1 dtw = ds.DataTable1.NewRow() dtw("Producto") = DataGridView2.Item(0, i).Value dtw("Precio") = Replace(CDbl(DataGridView2.Item(1, i).Value), ",", ".") dtw("Cantidad") = DataGridView2.Item(2, i).Value dtw("Subtotal") = DataGridView2.Item(3, i).Value ds.DataTable1.Rows.Add(dtw) Next ''---------------------PREPARAR REPORTE-------------------- fuente.Name = "DataSet1" ' 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 ReportViewer1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ReportViewer1.Load
          
            Me.ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)
            Me.ReportViewer1.ZoomMode = ZoomMode.FullPage
            Dim parameters As New List(Of ReportParameter)()
    
            parameters.Add(New ReportParameter("param1", FrmVentas.txttotal.Text))
    
            Dim DataTable As DataTable = CType(FrmVentas.DataGridView2.DataSource, DataTable)
    
            If FrmVentas.txtdescuento.Text = "" Then
                FrmVentas.txtdescuento.Text = "0"
            Else
                parameters.Add(New ReportParameter("param2", FrmVentas.txtdescuento.Text))
            End If
    
            Me.ReportViewer1.LocalReport.SetParameters(parameters)
            Me.ReportViewer1.RefreshReport()
        End Sub

    Saludos

    • Editado Federico32113 lunes, 26 de diciembre de 2016 21:48
    • Cambiado Enrique M. Montejo miércoles, 28 de diciembre de 2016 18:30 Pregunta relacionada con el control de informes de Windows Forms.
    sábado, 24 de diciembre de 2016 0:03

Todas las respuestas

  • Hola:

    Si el DataGridView se ha cargado con una instruccion como esta
    DataGridView.DataSource = TU_DATATABLE
    Para cargar un datatable con los valores del DataGridView, con una instruccion como esta
    Dim dtDataTable As DataTable = Ctype(TU_DataGridView.DataSource, DataTable)

    Un saludo desde Bilbo
    Carlos
    • Propuesto como respuesta Joyce_AC lunes, 26 de diciembre de 2016 16:31
    • Marcado como respuesta Federico32113 lunes, 26 de diciembre de 2016 21:48
    • Desmarcado como respuesta Federico32113 lunes, 26 de diciembre de 2016 21:48
    • Votado como útil Federico32113 lunes, 26 de diciembre de 2016 23:41
    • Marcado como respuesta Federico32113 lunes, 26 de diciembre de 2016 23:41
    • Desmarcado como respuesta Federico32113 lunes, 26 de diciembre de 2016 23:41
    domingo, 25 de diciembre de 2016 10:31
  • No lo realizo de esa forma, te adjunto mas código...

        Private Sub ReportViewer1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ReportViewer1.Load
        
            Me.ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)
            Me.ReportViewer1.ZoomMode = ZoomMode.FullPage
            Dim parameters As New List(Of ReportParameter)()
    
            parameters.Add(New ReportParameter("param1", FrmVentas.txttotal.Text))
    
            Dim DataTable As DataTable = CType(FrmVentas.DataGridView2.DataSource, DataTable)
    
            If FrmVentas.txtdescuento.Text = "" Then
                FrmVentas.txtdescuento.Text = "0"
            Else
                parameters.Add(New ReportParameter("param2", FrmVentas.txtdescuento.Text))
            End If
    
            Me.ReportViewer1.LocalReport.SetParameters(parameters)
            Me.ReportViewer1.RefreshReport()
        End Sub


    lunes, 26 de diciembre de 2016 21:49
  • Hola, tengo un dataset el cual lleva los datos del datagrid para su posterior impresión.

    Tengo esta función pero al momento de leer los valores del datagrid me los saltea yendo a "Preparar reporte"

    Porque podría ser?El Dataset llega vacio o esta mal conectado? si es necesario puedo adjuntar cualquier cosa que sea necesaria si no se llega a comprender.

    Tengo una tabla donde quiero mostrar los valores, la cual la propiedad "DataSetName" esta seleccionado el DataSet

            

     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 DataGridView2.Rows.Count - 1 dtw = ds.DataTable1.NewRow() dtw("Producto") = DataGridView2.Item(0, i).Value dtw("Precio") = Replace(CDbl(DataGridView2.Item(1, i).Value), ",", ".") dtw("Cantidad") = DataGridView2.Item(2, i).Value dtw("Subtotal") = DataGridView2.Item(3, i).Value ds.DataTable1.Rows.Add(dtw) Next ''---------------------PREPARAR REPORTE-------------------- fuente.Name = "DataSet1" ' 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 ReportViewer1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ReportViewer1.Load
          
            Me.ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)
            Me.ReportViewer1.ZoomMode = ZoomMode.FullPage
            Dim parameters As New List(Of ReportParameter)()
    
            parameters.Add(New ReportParameter("param1", FrmVentas.txttotal.Text))
    
            Dim DataTable As DataTable = CType(FrmVentas.DataGridView2.DataSource, DataTable)
    
            If FrmVentas.txtdescuento.Text = "" Then
                FrmVentas.txtdescuento.Text = "0"
            Else
                parameters.Add(New ReportParameter("param2", FrmVentas.txtdescuento.Text))
            End If
    
            Me.ReportViewer1.LocalReport.SetParameters(parameters)
            Me.ReportViewer1.RefreshReport()
        End Sub

    Saludos

    • Combinado Enrique M. Montejo miércoles, 28 de diciembre de 2016 18:35 Pregunta duplicada
    martes, 27 de diciembre de 2016 13:57
  • El principal problema que veo es este:

            Catch ex As Exception
            End Try
     

    En general, nunca deberías escribir en un programa un bloque Catch vacío, salvo rarísimas excepciones que deben tener una justificación clara y concreta, la cual se debe escribir y documentar en el Catch vacío.

    En este caso concreto, el problema de ese Catch vacío es que si se produce cualquier error en el bucle que va leyendo desde el DataGridView2 al DataSet1 (cosa que podría ocurrir por múltiples razones, por ejemplo, un problema de conversión en caso de que el tipo de algún dato no sea correcto), pues entonces se saldrá del bucle y no copiará los datos restantes, y no te enterarás de por qué ha sido, ya que te estás tragando la excepción de manera silenciosa. Esto es una pésima práctica, nunca te tragues las excepciones silenciosamente.

    martes, 27 de diciembre de 2016 15:16
  • Te lo adjunto

    El principal problema que veo es este:

            Catch ex As Exception
            End Try

    Como me recomienda que lo soluciones?


    martes, 27 de diciembre de 2016 15:18
  • Te lo adjunto

    No veo tan correcta la forma como lo haces te sugeriría leas el ejemplo que te puse líneas arriba

    también revisa.

    https://social.msdn.microsoft.com/Forums/es-ES/2589e15f-2ab4-48a4-8613-e0dfe0ca5f7d/llenar-dataset-tipado?forum=netfxwebes


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.



    • Editado Augusto1982 martes, 27 de diciembre de 2016 16:02
    • Propuesto como respuesta Joyce_AC martes, 27 de diciembre de 2016 16:07
    • Votado como útil Joyce_AC miércoles, 28 de diciembre de 2016 17:16
    martes, 27 de diciembre de 2016 15:22
  • haz intentado asi?

    fuente.Name= ds.Tables(0)

    Me da el siguiente error si lo remplazo por eso 

    Un valor de tipo 'System.Data.DataTable' no se puede convertir en 'String'.
    martes, 27 de diciembre de 2016 16:04
  • Lo que no comprendo es porque al pasar por esta linea

        For i As Integer = 0 To DataGridView2.Rows.Count - 1

    Me salta a esta

        fuente.Name = "DataSet1"

    En el siguiente procediemiento

     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 DataGridView2.Rows.Count - 1
                    dtw = ds.DataTable1.NewRow()
                    dtw("Producto") = DataGridView2.Item(0, i).Value
                    dtw("Precio") = Replace(CDbl(DataGridView2.Item(1, i).Value), ",", ".")
                    dtw("Cantidad") = DataGridView2.Item(2, i).Value
                    dtw("Subtotal") = DataGridView2.Item(3, i).Value
                    ds.DataTable1.Rows.Add(dtw)
                Next
                ''---------------------PREPARAR REPORTE--------------------
                fuente.Name = "DataSet1" ' 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



    martes, 27 de diciembre de 2016 16:57
  • "Lo que no comprendo es porque al pasar por esta linea

       For i As Integer = 0 To DataGridView2.Rows.Count - 1

    Me salta a esta"

    Será porque el datagridview no tiene líneas,porque no intentas

     For Each row As DataGridViewRow In DataGridview2.Rows.count
         dtw=ds.DataTable1.NewRow()
         dtw("Producto")= CStr(row.Cells(0).Value))
         dtw("Precio")  = CStr(row.Cells(1).Value)).....

    y para llenar el dataset

      Dim rprtDTSource As ReportDataSource = New ReportDataSource(ds.DataTable1.TableName, ds.Tables(0))
    
    ReportViewer1.LocalReport.DataSources.Add(rprtDTSource)
    ReportViewer1.LocalReport.ReportPath = Path.Combine(Application.StartupPath, "Report1.rdlc")
    Me.ReportViewer1.LocalReport.Refresh()
    Me.ReportViewer1.RefreshReport()


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.

    • Marcado como respuesta Federico32113 martes, 27 de diciembre de 2016 19:16
    • Propuesto como respuesta Enrique M. Montejo miércoles, 28 de diciembre de 2016 18:37
    martes, 27 de diciembre de 2016 17:18
  • Puede encontrar porque no me lo mostraba gracias a tu ayuda.

    Limpiaba el datagridview con la siguiente función DataGridView2.Rows.Clear() antes de usar los datos y por eso no encontraba nada.

    • Marcado como respuesta Federico32113 martes, 27 de diciembre de 2016 19:16
    martes, 27 de diciembre de 2016 17:36