Help with reportviewer +MYSQL (tables+object data)

Asked

Viewed 513 times

0

I have a problem with creating a reportviewer. I programmed a structure, which calls the report, passes a single parameter to the report, saves it as PDF, and opens it with the native PDF reader.

Follow the code of that part:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Reporting.WebForms;
using System.IO;
using System.Diagnostics;

namespace teste_em_report_viewer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void BtnGerar_Click(object sender, EventArgs e)
        {
            // responsável por visualizar o relatório
            ReportViewer reportViewer = new ReportViewer(); 

            // esse relatorio vai ser processado nessa maquina
            reportViewer.ProcessingMode = ProcessingMode.Local; 

            // caminho para encontrar o relatório
            reportViewer.LocalReport.ReportEmbeddedResource = "teste_em_report_viewer.MeuRelatorio .rdlc"; 

            //parâmetros do Relatório
            // lista com varios parâmetros
            List<ReportParameter> listReportParameter = new List<ReportParameter>();

            // dentro do construtor ReportParameter, eu passei o nome do parâmetro criado no report la, e passei o conteúdo que eu quero enviar para ele
            listReportParameter.Add(new ReportParameter("ReportParameter1", TxtNome.Text));
            //listReportParameter.Add(new ReportParameter("Endereco", TxtEndereco.Text));

            // passei a lista de parâmetros para o meu report, declarado la em cima
            reportViewer.LocalReport.SetParameters(listReportParameter);

            // criado apenas para caso dê erros, o sistema encorpora os erros nessas variáveis 
            Warning[] warning;
            string[] streamids;
            string mimeType;
            string encoding;
            string extension;

            // array de bytes, eu crio ele, passo o array, e o usuário renderiza

            // os dois parametros são os mais importantes, que são o formato(extensão) e o segundo, eu passo nulo... out eu estou passando as variáveis por referência

            // esse ja é o meu relatório
            byte[] bytePDF = reportViewer.LocalReport.Render
                (
                "pdf",null, out mimeType, out encoding, out extension, out streamids, out warning
                );

            // esse comando é responável por transferir meu relatório e salvar na minha maquina local

            FileStream fileStreamPDF = null;

            /* esses recursos permitem que um arquivo sempre terá um nome único
             * 
             * path.gettempath() = pega o caminho da minha pasta TEMP
             * "RelatorioDiego" = o nome que eu quiser dar pro meu relatorio
             * DateTime.Now.Tostring() = Concatena o horário no momento criado, junto ao nome, para evitar nomes duplicados
             * +".pdf" = concatena a  extensão do meu arquivo
             * */
            string nomeArquivoPDF = Path.GetTempPath() +
                "RelatorioDiego" + DateTime.Now.ToString("dd_MM_yyyy-HH_mm_ss") + ".pdf";

            // local C:\Users\diegolinkk\AppData\Local\Temp

            // cria o arquivo com o nome que eu defini acima
            fileStreamPDF = new FileStream(nomeArquivoPDF, FileMode.Create);

            // ele vai escrever o meu array de byte relatorio "bytepdf", da posição inicial [0], até a posição final [byte.lengh]
            fileStreamPDF.Write(bytePDF, 0, bytePDF.Length);
           //escreve, fecha
            fileStreamPDF.Close();

            // comando que encontra o arquivo, seleciona o programa que abre aquele arquivo, e abre

            // passando o caminho completo com o caminho do arquivo
            Process.Start(nomeArquivoPDF);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            teste_chamar_form_de_outro_local Form2 = new teste_chamar_form_de_outro_local();
            Form2.Show();
        }
    }
}

Until this stretch, there are no problems, the parameters work correctly and everything else.

But when I go to add a table in reportviewer through a DataSet, to insert tables in reportviewer, the program starts pointing out an error in this excerpt:

byte[] bytePDF = reportViewer.LocalReport.Render("pdf", null, out mimeType, out encoding, out extension, out streamids, out warning);

and only works again if I delete the dataset from my reportviewer.

I wonder if anyone can help me solve this problem. Where am I wrong? What is the best way to implement all this and how can I pass objects that I created, directly to reportviewer? Is there a way?

  • What an error that appears in that passage?

  • @jbueno Visual studio interrupts the application, marks the whole line in yellow " : byte[] bytePDF = reportViewer.LocalReport.Render ( "pdf", null, out mimeType, out encoding, out extension, out streamids, out warning );' " and the error that appears is as follows: "An unhandled Exception of type 'Microsoft.Reporting.Webforms.Localprocessingexception' occurred in Microsoft.ReportViewer.Webforms.dll" Additional information: An error occurred while processing local reports."

  • @jbueno and for example: when I delete the configured dataset and the table I added in Reportviewer; the application works normally again. What I’d like to know is how to work with both types of data (coming straight from objects passed as parameters, so that I avoid this kind of error

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.