none
datagridview a datagridview RRS feed

  • Pregunta

  • bueno, el problema es el siguiente:

    Tengo este código

    Private Sub btnNomina_Click(sender As Object, e As EventArgs) Handles btnNomina.Click
            For Each row As DataGridViewRow In gridemp.SelectedRows
                Dim id As String = row.Cells("Id").Value
                Dim NombreCompleto As String = row.Cells("Nombre Completo").Value
                gridreport.Rows.Add(id, NombreCompleto)
            Next
            Dim R As New frmnomina
            R.Show()
            Dim dat As New DataTable
            dat = gridreport.DataSource
            Dim cr As New Nomina
            cr.SetDataSource(dat)
            R.rpvnom.ReportSource = cr
        End Sub
    End Class

    ahi envio datos de un grid a otro el problema es que en el crystal reports no los muestra

    miércoles, 27 de julio de 2016 22:05

Respuestas

  • de hecho tengo todos los reportes con un datatable y todos funciionan menos ese, creo que el error puede ser en la parte de pasar de un datagrid a otro 

    Hola Ariel _Diaz,

    Al parecer sí, si estás agregando los registros al gridreport usando gridreport.Rows.Add(...), porque luego quieres obtener el valor del DataSource??? 

    dat = gridreport.DataSource

    Prueba haciendo esto :

           'Creo un DataTable
            Dim dat As New DataTable
    
            'Creo las columnas
            dat.Columns.Add("Id")
            dat.Columns.Add("NombreCompleto")
    
            'Recorro el gridemp y agrego los elementos seleccionados
            ' al DataTable
            For Each row As DataGridViewRow In gridemp.SelectedRows
                dat.Rows.Add(row.Cells("Id").Value.ToString,
                             row.Cells("Nombre Completo").Value.ToString)
            Next
    
            'Asigno los datos
            gridreport.DataSource = dat
    
            Dim R As New frmnomina
            R.Show()
    
            Dim cr As New Nomina
            cr.SetDataSource(dat)
            R.rpvnom.ReportSource = cr

    Cabe resaltar, que cuando usas el DataSource en gridreport, este ya no necesita que crees columnas en tiempo de diseño, las columnas se crean del DataTable.

    Pruébalo y nos comentas como te va.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Ariel _Diaz jueves, 28 de julio de 2016 16:27
    miércoles, 27 de julio de 2016 23:17

Todas las respuestas

  • Hola Ariel _Diaz

    Necesitas cargar los datos a un dataset no a un datatable ya que el asistente del Crystal reports obtiene los datos desde un dataset.

    Revisa el post, te muestra cómo hacerlo:

    Crystal Reports

    Saludos y suerte

     

    Javier


    miércoles, 27 de julio de 2016 22:19
  • de hecho tengo todos los reportes con un datatable y todos funciionan menos ese, creo que el error puede ser en la parte de pasar de un datagrid a otro 
    miércoles, 27 de julio de 2016 22:29
  • de hecho tengo todos los reportes con un datatable y todos funciionan menos ese, creo que el error puede ser en la parte de pasar de un datagrid a otro 

    Hola Ariel _Diaz,

    Al parecer sí, si estás agregando los registros al gridreport usando gridreport.Rows.Add(...), porque luego quieres obtener el valor del DataSource??? 

    dat = gridreport.DataSource

    Prueba haciendo esto :

           'Creo un DataTable
            Dim dat As New DataTable
    
            'Creo las columnas
            dat.Columns.Add("Id")
            dat.Columns.Add("NombreCompleto")
    
            'Recorro el gridemp y agrego los elementos seleccionados
            ' al DataTable
            For Each row As DataGridViewRow In gridemp.SelectedRows
                dat.Rows.Add(row.Cells("Id").Value.ToString,
                             row.Cells("Nombre Completo").Value.ToString)
            Next
    
            'Asigno los datos
            gridreport.DataSource = dat
    
            Dim R As New frmnomina
            R.Show()
    
            Dim cr As New Nomina
            cr.SetDataSource(dat)
            R.rpvnom.ReportSource = cr

    Cabe resaltar, que cuando usas el DataSource en gridreport, este ya no necesita que crees columnas en tiempo de diseño, las columnas se crean del DataTable.

    Pruébalo y nos comentas como te va.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Ariel _Diaz jueves, 28 de julio de 2016 16:27
    miércoles, 27 de julio de 2016 23:17
  • Estás queriendo cargar el datatable con el datasource de un gridview, no es válido

    Private Sub btnNomina_Click(sender As Object, e As EventArgs) Handles btnNomina.Click
            For Each row As DataGridViewRow In gridemp.SelectedRows
                Dim id As String = row.Cells("Id").Value
                Dim NombreCompleto As String = row.Cells("Nombre Completo").Value
                gridreport.Rows.Add(id, NombreCompleto)
            Next
            Dim R As New frmnomina
            R.Show()
            Dim dat As New DataTable
            dat = ConvierteGRidViewDataTable(gridreport)
            Dim cr As New Nomina
            cr.SetDataSource(dat)
            R.rpvnom.ReportSource = cr
        End Sub
    
    
    // devuelve un datatable cargado con datos del grid pasado 
    Public Function ConvierteGRidViewADataTable(ByVal miDataGrid as DataGridView) As System.Data.DataTable
       Dim dtNuevo As System.Data.DataTable = New System.Data.DataTable
       Dim colNueva As System.Data.DataColumn
       Dim filaNueva As System.Data.DataRow
       Dim numCols As Integer
    
       ' Replicamos las columnas del DataGridView en el DataTable nuevo
       For Each dataGridViewCol As DataGridViewColumn In miDataGrid.Columns
          colNueva = New System.Data.DataColumn(dataGridViewCol.DataPropertyName, dataGridViewCol.ValueType)
          dtNuevo.Columns.Add(colNueva)
       Next
    
       numCols = dtNuevo.Columns.Count
    
       ' Rellenamos los valores del DataTable nuevo con los valores de las celdas del DataGridView
       For Each filaDatos as DataGridViewRow In miDataGrid.Rows
          If filaDatos.DataBoundItem IsNot Nothing Then
             filaNueva = dtNuevo.NewRow()
             For i As Integer = 0 To numCols - 1
                filaNueva(i) = filaDatos(i).Value
             Next
             dtNuevo.Rows.Add(filaNueva)
          End If
       Next
    
       Return dtNuevo
    End Function
    
    End Class
    Suerte

    Javier

    miércoles, 27 de julio de 2016 23:24
  • Hola:
    Cambia la linea
    dat = gridreport.DataSource

    Por esta otra
    dat = Ctype(gridreport.DataSource, datatable)

    Un saludo desde Bilbo
    Carlos
    jueves, 28 de julio de 2016 5:15
  • muchas gracias (Y) eso es correcto
    jueves, 28 de julio de 2016 16:28