none
Como fazer SubReport em um ReportViewer? RRS feed

  • Pergunta

  • Até então encontrei vários artigos mas nenhum me ajudou a solucionar meu problema. Tenho dois DataSets e preciso que sejam inseridos no relatório, mas não encontrei forma de adicionar o SubReport ao relatório principal. Alguém poderia me ajudar??
    segunda-feira, 15 de abril de 2013 20:29

Respostas

Todas as Respostas

  • Ernane,

    Este post tem exatamente o que você precisa:

    http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/8ed09197-e03f-4e83-8a48-d7da4ba25f50/

    Abraço!!!


    (Se a isto ajudou a resolver o problema, por favor, marque como resposta)

    • Marcado como Resposta Ernane Ribas terça-feira, 16 de abril de 2013 12:26
    segunda-feira, 15 de abril de 2013 20:42
  • Obrigado pelo link, ajudou muito, mas agora estou com um outro problema. Por precisar de dois subreports, adicionei eles em meu Report, mas o segundo SubReport traz os mesmos dados que o primeiro. Como poderia resolver?
    terça-feira, 16 de abril de 2013 12:14
  • Ahhh, já consegui, e vir aqui dar o meu FeedBack. Faltava somente trocar  o nome do DataSet que estava utilizando, como estava utilizando o mesmo nome viam os mesmos dados. O Vai o código a seguir para mostrar como fiz:

    public partial class frmRelatorioOrcamento : Form
        {
            String id = null;
            public frmRelatorioOrcamento(String paramId)
            {
                InitializeComponent();
    
                id = paramId;
            }
    
            private void frmRelatorioOrcamento_Load(object sender, EventArgs e)
            {
                reportViewer1.ProcessingMode = ProcessingMode.Local;
                reportViewer1.LocalReport.ReportPath = @"..\..\Report1.rdlc";
    
                this.OrcamentosTableAdapter.Fill(this.RelOrcamento.Orcamentos, id);
    
                // Run the report
                reportViewer1.RefreshReport();
    
                // Add a handler for the SubreportProcessing event
                reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(CarregarSubReportProdutos);
                reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(CarregarSubReportServicos);
            }
    
            private void frmRelatorioOrcamento_FormClosing(object sender, FormClosingEventArgs e)
            {
                reportViewer1.Dispose();
            }
    
            private void CarregarSubReportProdutos(object sender, SubreportProcessingEventArgs e)
            {
                e.DataSources.Add(new ReportDataSource("RelProdutosOrcamento", LoadDadosSubreportProdutos()));
                
            }
    
            private void CarregarSubReportServicos(object sender, SubreportProcessingEventArgs e)
            {
                e.DataSources.Add(new ReportDataSource("RelServicosOrcamento", LoadDadosSubreportServicos()));
            }
    
            private DataTable LoadDadosSubreportProdutos()
            {
                return this.produtosTableAdapter.GetData(id);
            }
    
            private DataTable LoadDadosReport()
            {
                return this.OrcamentosTableAdapter.GetData(id);
            }
    
            private DataTable LoadDadosSubreportServicos()
            {
                DataTable servicos =  this.servicosTableAdapter.GetData(id);
                return servicos;
            }
        }

    terça-feira, 16 de abril de 2013 12:29
  • Olá Ernane Ribas, estou com um problema semelhante ao que vc estava.

    Estou usando um subreport e quando é gerado o relatório está acontecendo esse erro: Data retrieval failed for the subreport, 'SubreportItem', located at: ImpressaoRelatorio.ArquivosRelatorio.rptDadosItemRequisicao.rdlc. Please chekc the log files for more information

    Este é meu código, se vc ou alguém do forum puder me ajudar:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.Reporting.WinForms;
    
    namespace ImpressaoRelatorio
    {
        public partial class frmImpressaoRelatorioRequisicaoReportViewer : Form
        {
            public frmImpressaoRelatorioRequisicaoReportViewer()
            {
                InitializeComponent();
            }
    
            public frmImpressaoRelatorioRequisicaoReportViewer(int IDPar) : this()
            {
                IDParceiro = IDPar;
            }
    
            private int IDParceiro = 0;
            private int cont = 0;
            DataTable RequisicaoItem = new DataTable();
            private void frmImpressaoRelatorioRequisicaoReportViewer_Load(object sender, EventArgs e)
            {
                // TODO: This line of code loads data into the 'GenericDataDataSet.RequisicaoRelatorio' table. You can move, or remove it, as needed.
                this.RequisicaoRelatorioTableAdapter.Fill(this.GenericDataDataSet.RequisicaoRelatorio, IDParceiro);
                RequisicaoRelatorioBindingSource.DataSource = this.GenericDataDataSet.RequisicaoRelatorio;
                //reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("GenericDataDataSet", RequisicaoRelatorioBindingSource));
                this.reportViewer1.RefreshReport();
                reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
            }
    
            private void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
            {
                try
                {
                    //int IDRequisicao = Convert.ToInt32(e.Parameters["IdRequisicao"].Values[0]);
                    this.requisicaoProdutoRelatorioTableAdapter.Fill(this.GenericDataDataSet.RequisicaoProdutoRelatorio, Convert.ToInt32(this.GenericDataDataSet.RequisicaoRelatorio.Rows[cont]["ID"].ToString()));
                    RequisicaoItem = this.GenericDataDataSet.RequisicaoProdutoRelatorio;
                    e.DataSources.Add(new ReportDataSource("GenericDataDataSet", RequisicaoItem));
                    cont++;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao gerar o relatório.\nErro: " + ex.Message, CompanyName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    }
    Obrigado desde já!
    segunda-feira, 29 de abril de 2013 13:15