Как передать строку подключения в веб отчет FastReport .NET

02.05.2020

Иногда у меня возникают ситуации, когда нужно настроить веб отчеты на другой источник данных. Это может потребоваться, если отчет разрабатывался с использованием тестовой базы данных, или база данных просто «переехала» в другое место. А может быть, вам наоборот нужно подключить отчет к тестовым данным. Так или иначе, возможность перенастроить строку подключения весьма полезна. В FastReport.Net это сделать очень просто. И я расскажу вам, как это сделать.

Рассмотрим на примере ASP .NET Core приложения. Напоминаю, наша задача передать из клиентской части строку подключения в отчет. Это можно реализовать двумя способами: передать параметр в отчет и в скрипте отчета переопределить строку подключения, либо переопределить строку подключения непосредственно в контроллере веб приложения. Второй способ более рациональный. Его я и продемонстрирую.

В контроллере воспользуемся методом Index. Именно в нем мы создадим объект отчета и назначим новую строку подключения. Поэтому, метод будет принимать параметр – строку подключения.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class HomeController : Controller
 {
 public IActionResult Index(string connstring)
 {
 WebReport webReport = new WebReport();
 if (connstring is null)
 {
 webReport.Report.Load("reports/Empty.frx");
 }
 else
 {
 webReport.Report.Load("reports/Master-Detail.frx");
 webReport.Report.Dictionary.Connections[0].ConnectionString = connstring;
 }
 ViewBag.WebReport = webReport;
 return View();
 }
}

Метод Index принимает параметр connstring, который изначально при запуске равен null. Чтобы объект веб отчета не сыпал ошибками при отображении страницы, нужно загрузить в него шаблон отчета. Так как строка подключения еще не известна, то пусть это будет пустой шаблон. В случае, когда строка подключения задана, мы загружаем нужный шаблон отчета и переопределяем в нем строку подключения. Все очень просто.

Если шаблон отчета изначально не имеет подключения к источнику данных, то можно добавить его. Вот пример для подключения к СУБД MSSQL:           

1
2
3
4
5
6
RegisteredObjects.AddConnection(typeof(MsSqlDataConnection));
 MsSqlDataConnection sqlConnection = new MsSqlDataConnection();
 sqlConnection.ConnectionString = connstring;
 sqlConnection.CreateAllTables();
 webReport.Report.Dictionary.Connections.Add(sqlConnection);
 webReport.Report.Load("reports/CoreMSSQL.frx");

У метода Index должно быть соответствующее представление. Добавим в него следующий код:

1
2
3
4
5
6
7
8
@{
 ViewData["Title"] = "Home Page";
}
<form asp-controller="Home" asp-action="Index" method="post">
 <input type="text" name="connstring">
 <input type="submit" value="Click">
</form> 
@await ViewBag.WebReport.Render()

Здесь мы использовали форму, которая ссылается на метод Index. В ней есть текстовое поле с именем connstring и кнопка. Содержимое текстовое поля будет передаваться методу в качестве параметра.

А теперь посмотрим, что у нас получилось:

Изначально строка подключения не задана, поэтому загрузился пустой шаблон отчета. Попробуем ввести строку подключения к xml базе данных:

«XsdFile=;XmlFile=C:\\Users\\Dimon\\source\\repos\\PassConnectionstring\\PassConnectionstring\\reports\\nwind.xml»

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

Таким способом, вы всегда можете выйти из ситуации, когда отчет не может подключиться к источнику данных, из-за его недоступности.

1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.
28 октября 2024

Как настроить WSL 2 для работы с FastReport и FastCube

В этой статье попробуем вместе разобраться, как настроить WSL 2 для работы с компонентами FastReport и FastCube в Lazarus для Linux.