none
Imprimir Seleccion Datagridview con Crystal Report Vb.net RRS feed

  • Pregunta

  • Hola amigos!!!, como están? bueno les comento el problema que estoy teniedo. Yo tengo mi datagridview que tengo varios datos, lo que quiero hacer es seleccionar algunos de esos datos y poder imprimirlos. 

    El código que tengo hasta ahora es el de la impresión total de mi datagridview:

        Private Sub Button1_Click_2(sender As System.Object, e As System.EventArgs) Handles Button1.Click

            Dim dtt As New DataTable
            dtt = tabla.DataSource
            Dim cr As New reporte '<------ Nombre de mi reporte (reporte.rpt)
            cr.SetDataSource(dtt)
            Dim R As New crystal '<------ Nombre del form que contiene el crystalreportviewer
            R.crvreporte.ReportSource = cr
            R.ShowDialog()


        End Sub

    Espero que me puedan ayudar.

    Gracias

    miércoles, 26 de diciembre de 2018 14:00

Todas las respuestas

  • Hola:
    Prueba con algo como esto.
    El Form tiene que tener 1 Button, 1 CrystalReportViewer y 1 DGV

    Option Explicit On
    Option Strict On
    Public Class Form1
        Private moDataTable As New DataTable()
        Private Sub Button1_Click_2(sender As System.Object, e As System.EventArgs) Handles Button1.Click    
            Try
                ' instanciar el objeto informe
                Dim oRptPrueba As New reporte()
                'Clonar la estructura del datatable que es el origen de datos del DGV
                 moDataTable = CType(TU_DGV.DataSource, DataTable).Clone
                 CopiarSeleccionados()
                ' tomar el objeto informe, y establecerle como fuente de datos, el DataTable que acabamos de rellenar de datos
                oRptPrueba.SetDataSource(moDataTable)
                ' cargar el informe en el control visualizador (CrystalReportViewer)
                Me.crvInforme.ReportSource = oRptPrueba
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Me.WindowState = FormWindowState.Maximized
        End Sub
        Sub CopiarSeleccionados()
            For Each Seleccion As DataGridViewRow In TU_DGV.SelectedRows
                moDatatable.Rows.Add(ObtenerValoresFila(Seleccion))
            Next
        End Sub

        Function ObtenerValoresFila(ByVal fila As DataGridViewRow) As String()
            'Recibe el 'row' y retorna su contenido en un array tipo string
            'Dimensionar el array al tamaño de columnas del DGV
            Dim Contenido(TU_DGV.ColumnCount - 1) As String
            'Rellenar el contenido con el valor de las celdas de la fila
            For Ndx As Integer = 0 To Contenido.Length - 1
                Contenido(Ndx) = CStr(fila.Cells(Ndx).Value)
            Next
            Return Contenido
        End Function
    End Class

    P.D.
    Lo ideal es que lo hagas con 2 Form.
    En el primero tienes el DGV cargado con los datos, se seleccionan "unas lineas" y al hacer click en el boton, se le pasa el segundo Form el datatable con los datos seleccionados.
    En el segundo Form tienes el CrystalReportViewer y cargas los datos del datatable pasado desde el primer Form.
    Espero que se entienda

    Un saludo desde Bilbo
    Carlos


    domingo, 30 de diciembre de 2018 9:23
  • Muchas gracias Carlos!!!, había hecho lo mismo que me mencionaste a lo ultimo, seleccionaba las filas y las insertaba en otra tabla que había hecho en mi base de datos y en el form2 estaba el datagridview con los datos de la tabla que se había cargado con lo que estaba seleccionado, pero no se porque me tira este error.

    No se puede convertir un objeto de tipo 'System.Windows.Forms.BindingSource' al tipo 'System.Data.DataTable' vb.net

    miércoles, 2 de enero de 2019 14:23
  • Hola:
    ¿Puedes poner el codigo donde se da el error?

    Un saludo desde Bilbo
    Carlos

    viernes, 4 de enero de 2019 10:25