none
reportViewer imprimir RRS feed

  • Pregunta

  • Hola,

    Como podría crear informes de reportViewer en pdf automáticamente?? Me explico,

    Tengo un dataGridView en el cual cargo datos desde Sql, lo que quiero es, las columnas que cumplan una condición que automáticamente genere un documento pdf cargado en reportViewer y lo almacene en una carpeta para después imprimir todo el contenido de la carpeta.

    A ver que podemos hacer...

    martes, 26 de febrero de 2019 11:04

Todas las respuestas

  • Hola,

    Yo exporto a PDF con esta funcion en VB.Net, es posible que te sirva...
    CRMensaje es el reporte de CystalReport.

     Shared Function exportarPDF(rpt As CRMensaje) As String
    
            Dim vFileName As String = Nothing
            Dim diskOpts As New DiskFileDestinationOptions()
    
            Try
                rpt.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
                rpt.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat
    
                'Ruta para guardar PDF.
                vFileName = Application.StartupPath & "\pdfs\FC_" & Variables.consecutivo & ".pdf"
    
                diskOpts.DiskFileName = vFileName
                rpt.ExportOptions.DestinationOptions = diskOpts
                rpt.Export()
    
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
    
            Return vFileName
    
        End Function

    Saludos.

    martes, 26 de febrero de 2019 11:08
  • Exportar a pdf ya lo hace, lo que quiero es que recorra todo el datagridview y cuando se cumpla la condición cree un fichero reportviewer...

    Adjunto un poquito de código...

                                                                                                
    foreach (DataGridViewRow row in dataGridView1.Rows)
                    { 
                        if (Convert.ToString(row.Cells["JM"].Value) == "JM")
                        {
    
                                lblnum.Text = dataGridView1.CurrentRow.Cells["PEDIDO"].Value.ToString();
                                con2.Close();
    
                                DataSet dt1 = new DataSet();
    
                                using (SqlDataAdapter r1r = new SqlDataAdapter("SELECT A1.ITEMCODE AS CODIGO, E.ITEMNAME AS DESCRIPCION, A1.U_C10Canti3Uni as CAJAS, A1.QUANTITY AS 'PIEZAS', A.CARDCODE as ID_CLIENTE, A.CARDNAME AS NOMBRE,  B.U_C10COMPED AS INFO, A.U_C10OBS AS OBSERVACIONES , C.CITYS AS CIUDAD, C.ZIPCODES AS CP, C.STREETS AS CALLE,  C.COUNTYS AS PROVINCIA,  B.DOCDUEDATE AS FECHA, CAST(ROUND(SUM(A1.QUANTITY * E.U_C10F2), 0, 0)AS INT) AS PESO,  F.NAME, D.SLPNAME AS COMERCIAL, B.U_C10EstadoC, B.U_C10EsPrep FROM OCRD A INNER JOIN ORDR B ON A.CARDCODE = B.CARDCODE INNER JOIN RDR12 C ON C.DOCENTRY=B.DOCENTRY INNER JOIN OSLP D ON D.SLPCODE=A.SLPCODE INNER JOIN RDR1 A1 ON A1.DOCENTRY = B.DOCENTRY INNER JOIN OITM E ON E.ITEMCODE = A1.ITEMCODE INNER JOIN [@C10RUTREP] F ON F.CODE= B.U_C10RutaRep WHERE B.DOCNUM  LIKE '" + lblnum.Text + "' AND B.U_C10EsPrep = 'I' AND B.U_C10EstadoC = 'A' AND B.Canceled = 'N'  GROUP BY A.CARDCODE, A.CARDNAME, C.STREETS, C.CITYS, C.ZIPCODES, C.COUNTYS, B.DOCDUEDATE, B.U_C10PESO, B.U_C10EsPrep, D.SLPNAME, A.U_C10OBS, B.U_C10EstadoC, B.DOCNUM, A1.ITEMCODE, A1.QUANTITY, B.U_C10COMPED, B.U_C10ABONO,  F.NAME, E.QRYGROUP6, A1.ITEMCODE, E.ITEMNAME, A1.QUANTITY, A1.U_C10Canti3Uni, E.U_C10ArPro ORDER BY E.U_C10ArPro", con2))
                                {
    
    
                                    int i = r1r.Fill(dt1);
    
                                    if (i > 0)
                                    {
                                        ReportDataSource datr1 = new ReportDataSource("DataPedi2", dt1.Tables[0]);
                                        reportViewer1.LocalReport.DataSources.Add(datr1);
                                        reportViewer1.LocalReport.DataSources.RemoveAt(0);
                                        reportViewer1.RefreshReport();
                                        Imppdf();
                                    }
                                }
    
        }


    Con esto solo me crea el fichero de la primera fila que cumple la condición tantas veces como filas hay que cumplan esa condición, no varia el valor del id


    • Editado Fiu78 martes, 26 de febrero de 2019 11:37
    martes, 26 de febrero de 2019 11:35
  • Tendrias que hacer algunos cambios.

    El primero es que con el bucle "for" lo que tienes que hacer es concatenar todos los ID en una cadena, separandolos por comas. Bueno, donde digo ID quiero decir el campo que estes usando para filtrar, ya que en tu Select no veo ningun ID.

    Lo segundo es que la sentencia select hay que cambiarla para que en lugar de condicionar el ID con un = o con un LIKE utilice un IN(...). Y ahi, entre los parentesis del IN, le pones esa cadena que has construido con todos los IDs obtenidos del datagridview.

    Y finalmente, como es logico, esa parte la pones FUERA del bucle para que solo se ejecute una vez. Solo tiene que quedar dentro del bucle la concatenacion de los IDs para formar una cadena.

    martes, 26 de febrero de 2019 12:02
    Moderador