none
Como paso datagridview a report viewer en VB NET 2012?

    Pregunta

  • Hola expertos,

    tengo varios días tratando de pasar las filas de un DGV a una hoja de informe y no lo he logrado MS Report Viewer que viene integrado en el VS 2012.

    Verán, tengo dos DGV, en el primero tengo algunos datos, y el usuario puede seleccionar uno o más de esos datos y se pasan al segundo DGV, de ese segundo DGV necesito pasar los datos al Report View para imprimir un recibo de pago. Ya he podido mostrar los campos de los textbox pero no del grid. He buscado y nada me ha funcionado.

    Espero me puedan ayudar/orientar para solucionar este problema.

    De antemano, gracias

    martes, 20 de septiembre de 2016 2:21

Respuestas

  • ¿Tienes ese segundo grid conectado mediate databinding a un datatable? Si no lo tienes, deberías tenerlo, la mejor forma de pasarle datos es no pasárselos directamente al grid sino pasárselos al datatable, y entonces el grid los presenta si tiene el datatable conectado a su datasource.

    Pues bien, una vez que esté así, ese mismo datatable se lo pasas directamente al Report:

    reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("nombreDelDataSetDelReport", nombreDelDataTableDelCodigoFuente))
              

    • Marcado como respuesta Juan Ortiz T martes, 20 de septiembre de 2016 23:24
    martes, 20 de septiembre de 2016 6:45
  • Toda la clave está en el debugger. Aprende a usarlo, porque es esencial para programar. Te ahorrará horas y horas. Y además es muy sencillo, simplemente pulsa F9 para poner un punto de ruptura en la línea deseada, ejecútalo hasta que se pare, y luego pasa el ratón por encima de la variable para ver su valor.

    Por ejemplo, una cosa que se me ocurre que podría pasar, y que no se ve en el código que has mostrado pero que resultaría evidente en cuanto examinases las variables con el debuger, es que tengas ese código en una subrutina separada en lugar de en el Form y que dentro hayas hecho un "new" para acceder al formulario, con lo que te saldría una copia invisible y vacía y esa instancia del grid no tendría ningún dato. No digo que te esté pasando eso, es solo un ejemplo de algo que sería detectable con el debugger pero que no se ve en el fragmento de código que has aportado.

    • Marcado como respuesta Juan Ortiz T viernes, 23 de septiembre de 2016 1:07
    jueves, 22 de septiembre de 2016 6:56

Todas las respuestas

  • ¿Tienes ese segundo grid conectado mediate databinding a un datatable? Si no lo tienes, deberías tenerlo, la mejor forma de pasarle datos es no pasárselos directamente al grid sino pasárselos al datatable, y entonces el grid los presenta si tiene el datatable conectado a su datasource.

    Pues bien, una vez que esté así, ese mismo datatable se lo pasas directamente al Report:

    reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("nombreDelDataSetDelReport", nombreDelDataTableDelCodigoFuente))
              

    • Marcado como respuesta Juan Ortiz T martes, 20 de septiembre de 2016 23:24
    martes, 20 de septiembre de 2016 6:45
  • Hola Alberto Poblacion,

    antes que nada gracias por tu respuesta.

    Hice algo así a lo que entendí, en el evento load del Report, pero aún así no me funciona, nada más logro mostrar el encabezado de cada columna.

            Dim dt As New DataTable
            Dim r As DataRow
    
            dt.Columns.Add("clave", Type.GetType("System.String"))
            dt.Columns.Add("nombre", Type.GetType("System.String"))
            dt.Columns.Add("precio", Type.GetType("System.String"))
    
            For i = 0 To ordenes.ExamenesDataGridView2.Rows.Count - 1
                r = dt.NewRow
                r("clave") = ordenes.ExamenesDataGridView2.Item(0, i).Value.ToString
                r("nombre") = ordenes.ExamenesDataGridView2.Item(1, i).Value.ToString
                r("precio") = ordenes.ExamenesDataGridView2.Item(2, i).Value.ToString
    
                dt.Rows.Add(r)
    
            Next
    
            ReportViewer1.LocalReport.DataSources.Add(New Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", dt))
            Me.ReportViewer1.RefreshReport()

    Disculpa si son preguntas muy obvias, pero no tengo mucha experienca en programación.

    martes, 20 de septiembre de 2016 23:24
  • Tal como lo tienes debería de funcionar. ¿Has probado a parar con el debugger justo después del bucle y examinar la variable "dt", a ver si realmente la ha cargado?
    miércoles, 21 de septiembre de 2016 6:37
  • Te refieres a usar el debug con breakpoints??

    Si es así, nunca he utilizado breakpoints, voy a  buscar como hacerlo y te dejo saber. Gracias

    Saludos

    Verás, ya he modificado, quitado, agregado código y aún no lo puedo solucionar. Me sigue mostrando nada más la cabecera de la tabla


    • Editado Juan Ortiz T jueves, 22 de septiembre de 2016 3:39
    miércoles, 21 de septiembre de 2016 21:50
  • Toda la clave está en el debugger. Aprende a usarlo, porque es esencial para programar. Te ahorrará horas y horas. Y además es muy sencillo, simplemente pulsa F9 para poner un punto de ruptura en la línea deseada, ejecútalo hasta que se pare, y luego pasa el ratón por encima de la variable para ver su valor.

    Por ejemplo, una cosa que se me ocurre que podría pasar, y que no se ve en el código que has mostrado pero que resultaría evidente en cuanto examinases las variables con el debuger, es que tengas ese código en una subrutina separada en lugar de en el Form y que dentro hayas hecho un "new" para acceder al formulario, con lo que te saldría una copia invisible y vacía y esa instancia del grid no tendría ningún dato. No digo que te esté pasando eso, es solo un ejemplo de algo que sería detectable con el debugger pero que no se ve en el fragmento de código que has aportado.

    • Marcado como respuesta Juan Ortiz T viernes, 23 de septiembre de 2016 1:07
    jueves, 22 de septiembre de 2016 6:56
  • Muchísimas gracias por el tiempo Alberto Poblacion. Y si,como me aconsejaste, voy a empezar a usar el debugger vi varias excepciones al correrlo con los breaks.

    ya lo he solucionado, en vez de poner los nombres de las columnas de la tabla de la base de datos, estaba poniendo los nombres del DGV...

    Dejo el código por si alguien tiene el mismo problema que yo

            Dim dt As New DataTable
            Dim r As DataRow
    
            dt.Columns.Add("claveEx")
            dt.Columns.Add("nombreEx")
            dt.Columns.Add("precioEx")
            dt.Columns.Add("folioEx")
    
            For i = 0 To ordenes.ExamenesDataGridView2.Rows.Count - 1
                r = dt.NewRow
                r("claveEx") = ordenes.ExDataGridView2.Item(0, i).Value.ToString
                r("nombreEx") = ordenes.ExDataGridView2.Item(1, i).Value.ToString
                r("precioEx") = ordenes.ExDataGridView2.Item(2, i).Value.ToString
                r("folioEx") = ordenes.ExDataGridView2.Item(3, i).Value.ToString
    
                dt.Rows.Add(r)
    
            Next
    
            ReportViewer1.LocalReport.DataSources.Add _
                (New Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", dt))

    Muchas gracias por la atención. Saludos




    • Editado Juan Ortiz T viernes, 23 de septiembre de 2016 3:25
    viernes, 23 de septiembre de 2016 1:24
  • Muchas gracias por compartir tu solucion.

    Disculpe la molestia molestia me podria ayudar. Soy nuevo en estos campos no se que hacer ya he pasado dos datagrid a datatable pero en la tercera me dice que no puedo porque en esta datagridview tengo numeros no puede convertir de double a string. Ya le he configurado para double pero no pasa nada.

    De antemano le agradezco la ayuda que me pueda brindar.

    sábado, 25 de agosto de 2018 5:40