Copiando as bandas e todo conteúdo de um relatório para outro

2021-03-31

Algumas vezes é necessário usar partes de um relatório em outro. Em casos simples, você pode usar a herança de relatório para fazer isso.

Por exemplo, há um caso em que todos os relatórios possuem elementos comuns (um logotipo da empresa, assinatura, etc.). Em seguida, esses objetos podem ser movidos para um relatório pai e, ao criar relatórios filho, eles serão copiados automaticamente. Assim, você não precisa copiá-los manualmente todas as vezes, o que simplifica e acelera muito a criação de novos relatórios. Além disso, se você alterar algo no relatório pai, essas alterações também serão refletidas em todos os relatórios filho.

No entanto, a herança de relatórios tem diversas limitações. Há casos em que um relatório tinha um “pai” e era necessário fazer um “pai” um relatório completamente diferente. Pode parecer suficiente alterar a propriedade BaseReport, mas, infelizmente, não funcionará.

Entretanto, esse problema pode ser resolvido de uma maneira sofisticada - substituindo as bandas de um código de relatório por bandas de outro. Supondo que haja um relatório de linha de base (base.frx) e suas bandas precisem ser copiadas para um relatório filho (child.frx). Você precisa substituir PageHeader, PageFooter e DataBand pelo nome "Data1". Os exemplos de código a seguir presumem que ambos os relatórios estão localizados na pasta raiz da unidade C.

Primeiro, você precisa baixar os dois relatórios:

Report base = new Report();
base.Load(@"C:\base.frx");
Report child = new Report();
child.Load(@"C:\child.frx");

A próxima etapa é obter as páginas de ambos os relatórios. É importante saber os nomes das páginas. O exemplo a seguir pressupõe que o nome da página em ambos os relatórios seja "Página1":

ReportPage basePage = base.FindObject("Page1") as ReportPage;
ReportPage childPage = child.FindObject("Page1") as ReportPage;

Se você não souber os nomes das páginas, poderá obtê-los no índice. Por exemplo, ainda temos acesso às primeiras páginas de ambos os relatórios:

ReportPage basePage = baseReport.Pages[0] as ReportPage;
ReportPage childPage = childReport.Pages[0] as ReportPage;

Ambas as opções são adequadas e levam ao mesmo resultado.

Agira você troca PageHeader e PageFooter. Simples assim:

childPage.PageHeader = basePage.PageHeader;
childPage.PageFooter = basePage.PageFooter;

Essas linhas copiam as duas bandas com todas as propriedades e configurações. Além disso, todos os objetos localizados neles são duplicados e as propriedades não são perdidas.

Depois, troque o nome DataBand com "Data1":

DataBand baseBand = basePage.FindObject("Data1") as DataBand;
DataBand childBand = childPage.FindObject("Data1") as DataBand;
// you need to get the Data1 index in the child report
int childBandIndex = childPage.Bands.IndexOf(childBand);
// you can now delete it
childPage.Bands.Remove(childBand);
// and insert the band from the base report in its place
childPage.Bands.Insert(bandIndex, baseBand);

No final, a banda com todas as propriedades e objetos filhos é copiada, e a vinculação à fonte de dados que é responsável pela propriedade DataSource é transferida também. Sem essa ligação, a banda não funcionará corretamente e não produzirá dados do banco de dados.

Precisamos apenas copiar as fontes de dados. Isso é feito com o seguinte snippet de código:

for (int i = 0; i < baseReport.Dictionary.DataSources.Count; i++)
{
 childReport.Dictionary.DataSources.Add(baseReport.Dictionary.DataSources[i]);
}

Assim, todas as fontes de dados foram copiadas. Se não for necessário, você pode clonar apenas os desejados.

É isso. Algumas dezenas de linhas de código tornaram possível copiar as bandas e objetos de um relatório para outro. Se você tem muitos objetos nas bandas, é muito longo e enfadonho duplicá-los com um designer e leva ainda mais tempo para criá-los do zero.

Obviamente, se o relatório base tiver apenas as bandas copiadas neste exemplo, essa tarefa pode ser executada ainda mais facilmente - copiando e colando trivialmente o arquivo de relatório. Piadas à parte, você pode usar este método para copiar uma ou mais bandas de um conjunto quando não precisar de todas elas em um novo relatório. Ou você pode pegar um cabeçalho de página de um relatório, uma banda de dados de outro e um rodapé de um terceiro.

.NET .NET FastReport FastReport C# C#
12 de outubro de 2026

A exportação de um relatório XML a partir de de Visualização em FastReport .NET

Saiba como salvar um relatório no formato XML no FastReport .NET: exportação a partir da visualização sem código e exportação programática por meio do XMLExport com configuração de parâmetros.
12 de outubro de 2026

GS1 DataBar Expanded Stacked: Recursos e a Configuração do FastReport .NET

Guia do código de barras GS1 DataBar Expanded Stacked: codificação em várias linhas de GTIN, datas de validade, pesos e números de lote. Saiba mais sobre a estrutura de dados, a leitura de códigos de barras e a configuração de segmentos no FastReport .NET.
12 de outubro de 2026

Ligar para o Greenplum Database em FastReport .NET

Aprenda a conectar o Greenplum Database ao FastReport .NET: como compilar o plug-in com o Npgsql, integrá-lo ao designer de relatórios e registrar o conector no código C# do aplicativo.

© 1998-2026 Fast Reports Inc.