Help with reportviewer + MYSQL (tables + object data)

0

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

Here is the code for this 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 section, there are no problems, the parameters work correctly and everything.

But when I add a table in the reportviewer through a DataSet , to insert tables in the reportviewer, the program starts to point out an error in that section:

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

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

I'd like to know if anyone can help me solve this problem. Where am I going wrong? What is the best way to implement all this and how can I pass objects I created directly to the reportviewer? How?

    
asked by anonymous 22.10.2015 / 03:46

0 answers