none
Enviar datos a un CrystalReport desde un DataGridView sin conexión a base de datos RRS feed

  • Pregunta

  • Saludos, les comento que estoy trabajando en un proyecto en el cual tengo un DataGridView llamado (ctGrid1), este objeto no tiene conexión a ninguna base de datos ya que se llena con operaciones matemáticas en tiempo de ejecución, tal como pueden ver en el código adjunto:

        Dim aRow As New System.Windows.Forms.DataGridViewRow
                    aRow.CreateCells(ctGrid1)
    
                    aRow.Cells(0).Value = CStr(intTr(i))
                    aRow.Cells(1).Value = CStr(DiameGraf(i, 0))
                    aRow.Cells(2).Value = CStr(Math.Round(LeffGraf(i, 0), 2))
                    aRow.Cells(3).Value = CStr(Math.Round(LssGraf(i, 0), 2))
                    aRow.Cells(4).Value = CStr(Math.Round(RGraf(i, 0), 2))
    
                    ctGrid1.Rows.Add(aRow)

    Las variables (intTr, DiameGraf, LeffGraf, LssGraf, Rgraf) contienen los valores que se muestran en el DataGridView (ctGrid1) como pueden ver en la imagen:

    Lo que necesito es mostrar esa tabla en un CrystalReports, he intentado con varios códigos que he encontrado navegando en la web, pero no me han funcionado, me genera varios errores.

    Muchas gracias de antemano.

    martes, 3 de febrero de 2015 19:08

Respuestas

  • Hola:

    Lo que tienes que pasar como origen de datos al fichero RPT, es un datatable con los valores que tiene el DGV, prueba con esta sentencia.

    Dim ldtDataTable As DataTable = CType(Me.ctGrid1.DataSource, DataTable)

    Un saludo desde Bilbo

    Carlos

    Muchas gracias por su ayuda, al final pude resolverlo, tuve que modificar el archivo App.config, originalmente estaba así:

     <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
     </startup>

    Luego lo dejé así:

     <startup useLegacyV2RuntimeActivationPolicy="true">
     	<supportedRuntime version="v4.0"/>
     </startup>
    
    

    Después de guardar cambios, agregué un Dataset1, luego inserté una Tabla de datos, con el número de columnas correspondientes al DataGridView y en el evento donde paso la información del DataGridView a la tabla del Dataset1 puse el siguiente código:

    Dim ds1 As New DataSet1 Dim dt As New DataTable("DataTable") Dim dr As DataRow Dim rpt As CrystalDecisions.CrystalReports.Engine.ReportDocument = New CrystalReport1() dt.Columns.Add("tr (min)") dt.Columns.Add("d (pulg)") dt.Columns.Add("Leff (pie)") dt.Columns.Add("Lss (pie)") dt.Columns.Add("R (12*Lss/d)") For i = 0 To Me.ctGrid1.Rows.Count - 1 dr = dt.NewRow dr("tr (min)") = Me.ctGrid1.Rows(i).Cells(0).Value dr("d (pulg)") = Me.ctGrid1.Rows(i).Cells(1).Value dr("Leff (pie)") = Me.ctGrid1.Rows(i).Cells(2).Value dr("Lss (pie)") = Me.ctGrid1.Rows(i).Cells(3).Value dr("R (12*Lss/d)") = Me.ctGrid1.Rows(i).Cells(4).Value dt.Rows.Add(dr)

    Next i ds1.Tables.Add(dt) rpt.SetDataSource(ds1.Tables(1)) frmReporte.CrystalReportViewer1.ReportSource = rpt frmReporte.Show()

    Y listo, problema resuelto, de nuevo agradezco la ayuda prestada.

    • Marcado como respuesta DobleJ456 domingo, 8 de febrero de 2015 17:30
    domingo, 8 de febrero de 2015 17:30

Todas las respuestas

  • Hola:

    Lo que tienes que pasar como origen de datos al fichero RPT, es un datatable con los valores que tiene el DGV, prueba con esta sentencia.

    Dim ldtDataTable As DataTable = CType(Me.ctGrid1.DataSource, DataTable)

    Un saludo desde Bilbo

    Carlos

    jueves, 5 de febrero de 2015 9:20
  • Hola:

    Lo que tienes que pasar como origen de datos al fichero RPT, es un datatable con los valores que tiene el DGV, prueba con esta sentencia.

    Dim ldtDataTable As DataTable = CType(Me.ctGrid1.DataSource, DataTable)

    Un saludo desde Bilbo

    Carlos

    Muchas gracias por su ayuda, al final pude resolverlo, tuve que modificar el archivo App.config, originalmente estaba así:

     <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
     </startup>

    Luego lo dejé así:

     <startup useLegacyV2RuntimeActivationPolicy="true">
     	<supportedRuntime version="v4.0"/>
     </startup>
    
    

    Después de guardar cambios, agregué un Dataset1, luego inserté una Tabla de datos, con el número de columnas correspondientes al DataGridView y en el evento donde paso la información del DataGridView a la tabla del Dataset1 puse el siguiente código:

    Dim ds1 As New DataSet1 Dim dt As New DataTable("DataTable") Dim dr As DataRow Dim rpt As CrystalDecisions.CrystalReports.Engine.ReportDocument = New CrystalReport1() dt.Columns.Add("tr (min)") dt.Columns.Add("d (pulg)") dt.Columns.Add("Leff (pie)") dt.Columns.Add("Lss (pie)") dt.Columns.Add("R (12*Lss/d)") For i = 0 To Me.ctGrid1.Rows.Count - 1 dr = dt.NewRow dr("tr (min)") = Me.ctGrid1.Rows(i).Cells(0).Value dr("d (pulg)") = Me.ctGrid1.Rows(i).Cells(1).Value dr("Leff (pie)") = Me.ctGrid1.Rows(i).Cells(2).Value dr("Lss (pie)") = Me.ctGrid1.Rows(i).Cells(3).Value dr("R (12*Lss/d)") = Me.ctGrid1.Rows(i).Cells(4).Value dt.Rows.Add(dr)

    Next i ds1.Tables.Add(dt) rpt.SetDataSource(ds1.Tables(1)) frmReporte.CrystalReportViewer1.ReportSource = rpt frmReporte.Show()

    Y listo, problema resuelto, de nuevo agradezco la ayuda prestada.

    • Marcado como respuesta DobleJ456 domingo, 8 de febrero de 2015 17:30
    domingo, 8 de febrero de 2015 17:30