Como mostrar múltiplos relatórios em uma página no Blazor

2022-07-12

How to display multiple reports in the single Blazor page

É comum que nossos usuários precisem mostrar dois relatórios com dados diferentes na mesma página. Suponhamos uma situação em que você precise comparar os relatórios do primeiro e do último mês. Para resolver seu problema, temos suporte do Blazor WebReport.

Exemplo de utilização de dois relatórios em uma página no Blazor

Vamos analisar mais de perto como implementar isto em seu aplicativo Blazor. Usaremos o aplicativo de teste do artigo “Relatórios e documentos PDF no Blazor” e removeremos tudo o que não seja necessário.

Primeiro, vamos tentar simplesmente mostrar dois relatórios na mesma página. Passamos para o arquivo “Pages\Index.razor.cs”.

Depois disso, adicionamos um segundo relatório. Não se esqueça de declará-lo e registrar os dados para ele primeiro, e depois insira o seguinte código:

Report Report2 { get; set; }
 
 Report2 = Report.FromFile(reportPath);
 Report2.RegisterData(DataSet, "NorthWind");

Ótimo, agora vamos mostrar nosso relatório. Vá para o arquivo “Pages\Index.razor.cs” e insira o código necessário:

 UserWebReport2 = new WebReport
 {
 Report = Report2,
 Toolbar = toolbar2
 };

Nosso arquivo agora será algo parecido com isto:

 public partial class Index
 {
 readonly string directory;
 const string DEFAULT_REPORT = "Filter Employees.frx";
 public Report Report1 { get; set; }
 public Report Report2 { get; set; }
 public WebReport UserWebReport { get; set; }
 
 public WebReport UserWebReport2 { get; set; }
 
 DataSet DataSet { get; }
 
 
 protected override void OnParametersSet()
 {
 base.OnParametersSet();
 
 string path = 
 Path.Combine(
 directory,
 string.IsNullOrEmpty(ReportName) ? DEFAULT_REPORT : ReportName);
 
 Report1 = Report.FromFile(path);
 Report2 = Report.FromFile(path);
 
 // Registers the application dataset
 Report1.RegisterData(DataSet, "NorthWind");
 Report2.RegisterData(DataSet, "NorthWind");
 
 
 ToolbarSettings toolbarSettings1 = new ToolbarSettings()
 {
 Color = Color.Red,
 IconColor = IconColors.White,
 Position = Positions.Left,
 };
 
 ToolbarSettings toolbarSettings2 = new ToolbarSettings()
 {
 Color = Color.Black,
 IconColor = IconColors.White,
 Position = Positions.Right,
 };
 
 UserWebReport = new WebReport
 {
 Report = Report1,
 Toolbar = toolbarSettings1,
 };
 UserWebReport2 = new WebReport
 {
 Report = Report2,
 Toolbar = toolbarSettings2,
 };
 }
 
 public Index()
 {
 directory = Path.Combine(
 Directory.GetCurrentDirectory(),
 Path.Combine("..", "..", "Reports"));
 
 DataSet = new DataSet();
 DataSet.ReadXml(Path.Combine(directory, "nwind.xml"));
 }
 }

Ótimo, agora vá para o arquivo “Pages/Index.razor” e insira o segundo componente nele: 

<WebReportContainer WebReport="@UserWebReport2"/>

Você pode ver o resultado executando nosso aplicativo Blazor e abrindo qualquer relatório. Por uma questão de clareza, escolhemos um relatório com gráficos e diagramas.

Mostrando dois relatórios em Blazor

E se:
- queremos ver diversos dados nestes relatórios;
- queremos ver um relatório diferente em cada folha;
- queremos ver um relatório com os trabalhadores e seus salários por mês;
- queremos ver relatórios com dados para setembro e no segundo para outubro;
- queremos abrir rapidamente outro relatório sem fechar o primeiro.

E haverá uma resposta para todas essas situações. Isso pode ser implementado!

Usaremos FastReport.NET, onde abrimos o designer de relatórios e modificamos nosso padrão Simple List.frx. Conectamos uma nova fonte de dados, em nosso caso será XML:

Conectando uma nova fonte de dados

Depois disso, vamos editar um pouco o relatório, removendo tudo o que é desnecessário e deixando apenas os campos de que precisamos. A seguinte captura de tela mostra perfeitamente todas as mudanças no relatório. 

Edição de um relatório

Agora você precisa criar uma condição para filtrar os dados. Clique duas vezes na coluna "Dados", à esquerda. Em seguida, na aba "Filtro", escreva a condição como na captura de tela abaixo. 

Filtragem de dados no relatório

Neste ponto, podemos salvar o relatório e abrir nosso aplicativo de teste. Vamos escrever um pequeno pedaço de código no arquivo “Pages/Index.razor”:

 public EventCallback Filter1()
 {
 UserWebReport.Report.Load(Path.Combine(directory,firstReport));
 UserWebReport.Report.SetParameterValue("Month", Select1);
 return default;
 }
 public EventCallback Filter2()
 {
 UserWebReport2.Report.Load(Path.Combine(directory,secondReport));
 UserWebReport2.Report.SetParameterValue("Month", Select2);
 return default;
 }
 public EventCallback ChangeReport1(){
 
 UserWebReport.Report.Load(Path.Combine(directory,firstReport));
 return default;
 }
 
 public EventCallback ChangeReport2(){
 
 UserWebReport2.Report.Load(Path.Combine( directory, secondReport));
 return default;
 }

Agora vamos adicionar 4 listas drop-down à página de relatórios para filtrar dados e passar entre relatórios:

 <div style="display:flex;flex-direction:column;">
 <div style="display:flex;flex-direction:row;">
 <div style="display:flex;flex-direction:column;">
 <select style= "margin-left:370px;" @onclick=ChangeReport1() @bind="@firstReport">
 <option>Simple List.frx</option>
 <option>Chart.frx</option>
 <option>Filter Employees.frx</option>
 </select>
 @if (@firstReport == "Filter Employees.frx")
 {
 <select style= "margin-left:400px;" @onclick=Filter1() @bind="@Select1">
 <option>September</option>
 <option>October</option>
 <option>November</option>
 </select>
 }
 </div>
 <div style="display:flex;flex-direction:column;">
 <select style= "margin-left:614px;" @onclick=ChangeReport2() @bind="@secondReport">
 <option>Simple List.frx</option>
 <option>Chart.frx</option>
 <option>Filter Employees.frx</option>
 </select>
 @if (@secondReport == "Filter Employees.frx")
 {
 <select style= "margin-left:681px;" @onclick=Filter2() @bind="@Select2">
 <option>September</option>
 <option>October</option>
 <option>November</option>
 </select>
}
 </div>
 </div> 

O arquivo Pages/Index.razor depois de todas as mudanças, será algo parecido com isto: 

@page "/"
@using System.IO;
@using System.Data;
 
 <div style="display:flex;flex-direction:column;">
 <div style="display:flex;flex-direction:row;">
 <div style="display:flex;flex-direction:column;">
 <select style= "margin-left:370px;" @onclick=ChangeReport1() @bind="@firstReport">
 <option>Simple List.frx</option>
 <option>Chart.frx</option>
 <option>Filter Employees.frx</option>
 </select>
 @if (@firstReport == "Filter Employees.frx")
 {
 <select style= "margin-left:400px;" @onclick=Filter1() @bind="@Select1">
 <option>September</option>
 <option>October</option>
 <option>November</option>
 </select>
 }
 </div>
 <div style="display:flex;flex-direction:column;">
 <select style= "margin-left:614px;" @onclick=ChangeReport2() @bind="@secondReport">
 <option>Simple List.frx</option>
 <option>Chart.frx</option>
 <option>Filter Employees.frx</option>
 </select>
 @if (@secondReport == "Filter Employees.frx")
 {
 <select style= "margin-left:681px;" @onclick=Filter2() @bind="@Select2">
 <option>September</option>
 <option>October</option>
 <option>November</option>
 </select>
 }
 </div>
 </div> 
 <div style="display:flex;flex-direction:row;">
 <WebReportContainer WebReport="@UserWebReport"/>
 
 <WebReportContainer WebReport="@UserWebReport2"/>
 </div>
</div>

 

@code {
 
 private string dir = Path.Combine(
 Directory.GetCurrentDirectory(),
 Path.Combine("..","..", "Demos", "Reports"));
 
 [Parameter]
 public string ReportName { get; set; }
 
 [Parameter]
 public string Select1 { get; set; } = "September";
 
 [Parameter]
 public string Select2 { get; set; } = "October";
 
 [Parameter]
 public string firstReport { get; set; } = "Filter Employees.frx";
 
 [Parameter]
 public string secondReport { get; set; } = "Filter Employees.frx";
 
 public EventCallback Filter1()
 {
 UserWebReport.Report.Load(Path.Combine(directory,firstReport));
 UserWebReport.Report.SetParameterValue("Month", Select1);
 return default;
 }
 public EventCallback Filter2()
 {
 UserWebReport2.Report.Load(Path.Combine(directory,secondReport));
 UserWebReport2.Report.SetParameterValue("Month", Select2);
 return default;
 }
 public EventCallback ChangeReport1(){
 
 UserWebReport.Report.Load(Path.Combine(directory,firstReport));
 return default;
 }
 
 public EventCallback ChangeReport2(){
 
 UserWebReport2.Report.Load(Path.Combine( directory, secondReport));
 return default;
 }
 
}

Gostaríamos de fazer uma pequena diversificação do relatório. Entre no arquivo "Pages/Index.razor.cs" para colorir nossas barras de ferramentas ao trabalhar com elas ao mesmo tempo. Adicione o seguinte código: 

 ToolbarSettings toolbarSettings1 = new ToolbarSettings()
 {
 Color = Color.Red,
 IconColor = IconColors.White,
 Position = Positions.Left,
 };
 
 ToolbarSettings toolbarSettings2 = new ToolbarSettings()
 {
 Color = Color.Black,
 IconColor = IconColors.White,
 Position = Positions.Right,
 };

Neste ponto, você pode executar o aplicativo de teste e ver o resultado:

Visualização de dois relatórios no aplicativo de teste Blazor


Fica bonito, mas ainda podemos melhorá-lo. O próximo passo é adicionar filtragem ao segundo relatório usando as listas drop-down na parte superior:

Filtragem de relatórios utilizando listas drop-down

Ótimo, agora vamos mudar o relatório no segundo componente: 

Visualização de dois relatórios diferentes

Desta forma, você pode não somente visualizar dois relatórios na mesma página, mas também realizar diferentes manipulações com eles. Por exemplo, tente filtrar os dados ou mesmo olhar diferentes relatórios ao mesmo tempo, como mostrado acima. Para sua conveniência, nosso WebReport permite que você personalize a barra de ferramentas para cada relatório, de acordo com suas necessidades.

Não desconsideremos que dois relatórios não são o limite e que pode haver até mesmo 10 em uma página! E sim, você pode fazer todo tipo de coisas com cada um deles sem nenhum problema.

Pode ver uma demonstração do projeto deste artigo no seguinte link: FastReport.Net Trial\Demos\Core\FastReport.Blazor.DoubleReports

Blazor C# Core FastReport .NET Report WebReport
30 de maio de 2025

Abrimos arquivos com a extensão FP3 usando o FastReport Viewer

O FastReport Viewer é a solução ideal para trabalhar com arquivos FP3, é permite abrir, visualizar, imprimir e exportar relatórios com facilidade.
22 de abril de 2025

Working with XML and JSON Formats in FastScript

In this article, we will take a closer look at how to work with JSON and XML in FastReport, see what properties and methods they have, and build reports from code with scripts.
08 de abril de 2025

How to Set Up a Connection to Apache Ignite in FastReport .NET

In this article, we will explore how to configure a connection to Apache Ignite in FastReport .NET. You will learn the necessary steps to connect the plugin via code and the report designer.
Fast Reports
  • 800-985-8986 (English, US)
  • +31 97 01025-8466 (English, EU)
  • +49 30 56837-3928 (German, DE)
  • +55 19 98147-8148 (Portuguese, BR)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2025 Fast Reports Inc.