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?
– Jéf Bueno
@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."– Diego Oliveira
@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
– Diego Oliveira