Как обновить веб отчет FastReport.Core

21.09.2020

Иногда вам требуется обновлять отчет, например, если вы подаете на вход новое значение переменной, или вообще хотите отобразить другой отчет в том же объекте веб отчета. При этом, как правило обновляется все представление (речь идет о MVC приложениях) по сабмиту. Но гораздо лучше было бы обновлять только объект веб отчета.

1. Update asp.net core report after variable change

https://forum.stimulsoft.com/viewtopic.php?f=13&t=57213

… All this is great and working well. What we cannot figure out is how to refresh the report Variables with this new posted-back data and have the report redraw. Is this done within the Controller and, if so, how do we tell the viewer to refresh (thus getting the new data) or is this done within the View and, if so, what is the correct method to call on the Viewer object. ...

2. How do I refresh a Web Report Viewer After Changing the Report.

https://forum.stimulsoft.com/viewtopic.php?f=13&t=58104

Что из себя представляет объект веб отчета? По сути это html контейнер с набором скриптов, которые позволяют осуществлять навигацию по страницам отчета и вызывать полезные функции, вроде печати и экспорта. А сам веб отчет – это отчет, экспортированный в html. Самым простым способом обновления части страницы будет использование iframe. Мы лишь будем подменять источник фрейма, а он сам получит по url частичное или полное представление с отчетом. Давайте рассмотрим пример, в котором на странице веб приложения выводится выпадающий список и фрейм. При выборе из выпадающего списка названия отчета - загружается объект веб отчета с соответствующим отчетом.

Для начала, в контроллере, нам понадобятся метод, возвращающий представление с объектом веб отчета:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public IActionResult Update(string SelectedItem)
 {
 if (SelectedItem != null)
 {
 WebReport webReport = new WebReport();
 webReport.Report.Load($"App_Data/{SelectedItem}.frx");
 
 var dataSet = new DataSet();
 dataSet.ReadXml("App_Data/nwind.xml");
 webReport.Report.RegisterData(dataSet, "NorthWind");
 
 webReport.Width = "1000";
 webReport.Height = "1000";
 ViewBag.WebReport = webReport;
 } 
 return PartialView();
 } 

Метод имеет входной параметр SelectedItem – имя выбранного отчета.

Для этого метода нужно создать частичное представление с единственной строкой кода, которая отображает объект веб отчета:

@await ViewBag.WebReport.Render()

Представление для стартовой страницы Index будет выглядеть так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@{
 ViewData["Title"] = "Home Page";
}
 <div> 
 <select onchange="$('#partialViewDiv').attr('src', '/Home/Update?SelectedItem='+this.value)" id="report">
 <option disabled selected>default</option>
 <option>Lines</option>
 <option>Simple list</option>
 <option>Barcode</option> 
 </select>
 </div>
 <table>
 <tr>
 <td>
 <iframe id="partialViewDiv" width="1000" height="1000"></iframe> 
 </td>
 </tr>
 </table>

Сначала, мы отображаем на форме выпадающий список с тремя доступными отчетами. В обработчике события onclick списка, мы присваиваем фрейму url источника. Сам url содержит путь к веб методу с указанием параметра. Значение параметра берется из выбранного элемента выпадающего списка. Ниже, выводится фрейм.

Запустим приложение. Выбираем из выпадающего списка отчет:

Selecting the web report

И получаем его:

Updated web report

Таким образом, частичное обновление страницы за счет использования фрейма реализуется очень просто.

4 октября 2023

Как из приложения ASP.NET Core сформировать отчет с использованием FastReport.Core.Skia

Рассказываем как сформировать отчет на Windows и Linux с использованием FastReport.Core.Skia и приватного NuGet сервера.
22 марта 2023

Создание PDF отчета в JetBrains Rider (C#) на «Альт Рабочая станция К» 10

В этой статье мы взглянем на платформу .NET в «Альт Рабочая станция К» 10 и создадим отчет, который можно экспортировать в PDF.
14 марта 2023

Будущее генерации отчетов с помощью Blazor WebAssembly

Пошаговая инструкция по созданию демо приложения на .NET 6 и 7 прямо в браузере с помощью Blazor WebAssembly в FastReport .NET.