Иногда у меня возникают ситуации, когда нужно настроить веб отчеты на другой источник данных. Это может потребоваться, если отчет разрабатывался с использованием тестовой базы данных, или база данных просто «переехала» в другое место. А может быть, вам наоборот нужно подключить отчет к тестовым данным. Так или иначе, возможность перенастроить строку подключения весьма полезна. В 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 должно быть соответствующее представление. Добавим в него следующий код:
Здесь мы использовали форму, которая ссылается на метод Index. В ней есть текстовое поле с именем connstring и кнопка. Содержимое текстовое поля будет передаваться методу в качестве параметра.
А теперь посмотрим, что у нас получилось:
Изначально строка подключения не задана, поэтому загрузился пустой шаблон отчета. Попробуем ввести строку подключения к xml базе данных:
«XsdFile=;XmlFile=C:\\Users\\Dimon\\source\\repos\\PassConnectionstring\\PassConnectionstring\\reports\\nwind.xml»
И получаем отчет:
Таким способом, вы всегда можете выйти из ситуации, когда отчет не может подключиться к источнику данных, из-за его недоступности.