none
Report sem Report Viewer RRS feed

  • Pergunta

  • Saudações

    estava tentando fazer um relatorio sem usar o Report Viewer. Acontece que não passa no localReport_SubreportProcessing, e  o subreport fica sem parametro.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Reporting.WinForms;
    using System.IO;
    using System.Windows.Forms;
    using System.Reflection;
    using AutoCom.Business.Model;
    using AutoCom.Business.BFL;
    
    namespace AutoCom.UI.Utils
    {
        public class ReportUtil
        {
            public const string RELATORIO_ESTOQUE = "AutoCom.UI.Relatorios.produtoEstoque.rdlc";
            public const string RELATORIO_HISTORICO_PRODUTO = "AutoCom.UI.Relatorios.historico.rdlc";
    
            public enum SubReportEnum
            {
                Nenhum = 0,
                Estoque
            }
    
            static SubReportEnum SubReport;
    
            LocalReport localReport;
    
            public ReportUtil(SubReportEnum subReport)
            {
                localReport = new LocalReport();
                localReport.SubreportProcessing += new SubreportProcessingEventHandler(localReport_SubreportProcessing);
                localReport.Refresh();
                SubReport = subReport;
            }
    
            public void GeraPdf(string report, string nome, object dataSource)
            {
                try
                {                
                    Assembly assembly = Assembly.GetExecutingAssembly();
                    Stream stream = assembly.GetManifestResourceStream(report);
    
                    localReport.LoadReportDefinition(stream);
                    localReport.DataSources.Add(new ReportDataSource("Produto", dataSource));
    
                    if (SubReport == SubReportEnum.Estoque)
                    {
                        Stream st = assembly.GetManifestResourceStream(RELATORIO_HISTORICO_PRODUTO);
                        localReport.LoadSubreportDefinition("historico", st);
                    }
    
                    Warning[] warnings;
                    string[] streamids;
                    string mimeType;
                    string encoding;
                    string filenameExtension;
    
                    byte[] bytes = localReport.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings);
    
                    SaveFileDialog s = new SaveFileDialog();
                    s.FileName = nome;
    
                    if (s.ShowDialog() == DialogResult.OK)
                    {
                        using (FileStream fs = new FileStream(nome, FileMode.Create))
                        {
                            fs.Write(bytes, 0, bytes.Length);
                        }
    
                    }
    
                    System.Diagnostics.Process.Start(nome);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            static void localReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
            {
                try
                {
                    switch (SubReport)
                    {
                        case SubReportEnum.Estoque:
    
                            string fkProduto = e.Parameters["FkProduto"].Values[0];
                            string dataSourceName = e.DataSourceNames[0];
                            IEnumerable<HistoricoProduto> itens = ProdutoFlow.ObterHistorico(Convert.ToInt32(fkProduto));
                            e.DataSources.Add(new ReportDataSource(dataSourceName, itens));
                            break;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    }
    

    O que pode ser?


    Desenvolva!!!

    quinta-feira, 17 de maio de 2012 10:32

Todas as Respostas