none
Dúvida com reportviewer RRS feed

  • Pergunta

  • Boa tarde,
    Venho por aqui ver se há alguém aqui que me possa ajudar com este problema.
    Tenho um Report que só mostra a última página, apesar de ter diversas.
    O que faz é:
    1. Mostrar o report,
    2. Criar um pdf
    3. Enviar um email desse pdf.
    O que está a acontecer é que, os passos 2 e 3 faz correctamente mas, no final, no reportviewer, apenas mostra o último enviado (aparece página 1 de 1 no cabeçalho).
    Segue parte do código (onde aparece "(...)" é código que não interfere) para verem o que poderei estar a fazer de errado.

    (...)
    Dim Params(19) As Microsoft.Reporting.WinForms.ReportParameter
    (...)
    myCmd.CommandText = "SELECT * FROM Tabela "
    myConn.Open()
    myReader = myCmd.ExecuteReader()
    Do While myReader.Read()
       Params(0) = New Microsoft.Reporting.WinForms.ReportParameter("Nome", myReader.Item("NOME").ToString)
    (...)
       Params(19) = New Microsoft.Reporting.WinForms.ReportParameter("MORADA", myReader.Item("MORADA").ToString)
    
       ReportViewer1.LocalReport.SetParameters(Params)
       ReportViewer1.RefreshReport()
    
    (...) -> Exporta para PDF. Ok!
    
    (...) -> Envia email. Ok!
    
    Loop


    No final, fico com todos os PDF numa pasta previamente seleccionada, os emails são todos enviados correctamente, mas... no reportviewer fico só com o último registo.
    Este report não utiliza tabelas, é como se fosse uma carta...
    Se fizer um stop (uma msgbox) após o RefreshReport aparece-me o relatório respectivo, só que depois o loop vai "limpá-lo" e substituir pelo próximo em vez de acrescentar uma nova página.

    Desde já agradeço a v/ disponibilidade


    • Editado J.Ayres quinta-feira, 3 de março de 2016 19:17
    segunda-feira, 29 de fevereiro de 2016 18:08

Todas as Respostas

  • Ayres, acho que talvez sua problema esteja na lógica do apagar para gerar outro, vc poderia deixar salvo na pasta quando o usuário solicitasse o relatório, vc o salvaria com um numero ou algo qualquer, ai vc poderia ter um batch que executaria a noite e excluíria da pasta os pdf gravados no dia anterior.


    Junior

    terça-feira, 1 de março de 2016 12:25
  • Júnior, muito obrigado pela sua resposta.

    O meu problema não é o apagar. O ficheiro PDF fica sempre numa determinada pasta. Quando eu crio um novo para o mesmo registo, ele vai ser substituído automaticamente. Quanto aos PDF não tenho problema algum.

    O problema é simplesmente de visualização no reportviewer, ou seja, o reportviewer não mostra todos os relatórios que criei na altura, mostra somente o último registo.

    Um abraço

    terça-feira, 1 de março de 2016 12:43
  • voce já olhou as configurações do report viewer ? 

    Junior

    terça-feira, 1 de março de 2016 14:00
  • Só umas 327 vezes!!! eheheh

    Mas não encontro lá nada que possa ter a ver com este problema de paginação...

    Mas acredito que esteja a ver alguma coisa mal, senão nem estaria aqui.

    Obrigado!

    terça-feira, 1 de março de 2016 16:37
  • a conversão do relatorio para pdf, será que não é ai o problema ? eu faço assim

    var bytes = reportViewer1.LocalReport.Render("PDF");
                Response.Buffer = true;
                Response.ContentType = "application/pdf";
                Response.AddHeader("content-disposition", "inline;attachment; filename=VagasporFuncao.pdf");
                Response.BinaryWrite(bytes);
                Response.Flush(); // send it to the client to download
                Response.Clear();


    Junior

    terça-feira, 1 de março de 2016 16:41
  • Como disse, não tenho problemas em criar os PDF. Inclusive, se fizer um break (MsgBox por exemplo) após o relatório ser criado e antes da criação do PDF o relatório é mostrado correctamente. Quando passo para o próximo registo é que o conteúdo do relatório é substituído pelo novo registo em vez de ser adicionada uma nova página.

    Inclusive tenho uma checkbox que permite ou não criar o PDF, e mesmo se a colocar como false continua a não mostrar numa nova página.

                If Me.cbx_PDF.Checked = True Then
                    Dim byteViewer As Byte() = ReportViewer1.LocalReport.Render("PDF")
                    Dim saveFileDialog1 As New SaveFileDialog()
                    saveFileDialog1.Filter = "*PDF files (*.pdf)|*.pdf"
                    saveFileDialog1.FilterIndex = 2
                    saveFileDialog1.RestoreDirectory = True
                    Dim newFile As New IO.FileStream(nameFile, IO.FileMode.Create)
                    newFile.Write(byteViewer, 0, byteViewer.Length)
                    newFile.Close()
                End If
    

    Obrigado.

    terça-feira, 1 de março de 2016 17:44