Usuário com melhor resposta
Como fazer SubReport em um ReportViewer?

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??
Respostas
-
Ernane,
Este post tem exatamente o que você precisa:
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
Todas as Respostas
-
Ernane,
Este post tem exatamente o que você precisa:
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
-
-
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; } }
-
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á!