Большинство отчетов выводят какие-либо данные. Как правило, эти данные получают из баз данных. Поэтому отчет имеет подключение к источнику данных, для того чтобы иметь список доступных таблиц и полей, а также сами данные. Но что, если на момент создания отчета в вашем распоряжении была лишь локальная база данных, к которой вы и создали подключение внутри отчета. Тогда на бою отчет работать не будет. Нужен валидный коннекшен. Выходов из этой ситуации может быть два: использовать источник данных из пользовательской программы, либо подменять строку подключения в отчете.
Первый способ хорошо вам известен. Нужно создать подключение в приложении, а затем зарегистрировать его в отчете. Тогда, при конструировании отчета вы можете выбрать этот источник по алиасу. С одной стороны, это удобно – изменение подключения в программе не отразится на отчете. Отчету все равно откуда берутся данные, лишь бы имена таблиц и полей, типы данных соответствовали заданным в шаблоне. Минус этого подхода – невозможно конструировать отчет без пользовательского приложения. Ведь подключение только в нем. Разработчик отчетов может и не иметь никакого пользовательского приложения с подключением. В этом случае ему подойдет именно внутреннее подключение к данным в отчете.
Поэтому давайте рассмотрим, как можно легко подменить подключение для уже готового отчета с внутренним подключением. Конечно, подключение должно происходить к так же базе данных, как и в отчете. Просто задаем ее другое расположение.
Для этого, приложении вам потребуется добавить ссылки на библиотеки: FastReport.dll и FastReport.JsonDataConnection.dll. В каталоге установки FastReport.net есть папка Extras\Connections\FastReport.Json. нужно собрать этот проект. В итоге вы и получите нужные библиотеки. Добавляем их в ссылки проекта. А далее код подмены коннекшена:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using FastReport; using FastReport.Utils; using FastReport.Data; private void Button1_Click(object sender, EventArgs e) { RegisteredObjects.AddConnection(typeof(JsonDataConnection)); Report report = new Report(); JsonDataConnection connection = new JsonDataConnection(); connection.ConnectionString = "Json=../../App_Data/nwind.json"; connection.CreateAllTables(); report.Dictionary.Connections.Add(connection); report.RegisterData(connection.DataSet); report.Load("../../App_Data/json.frx"); report.Prepare(); report.Show(); } |
В начале мы регистрируем объект подключения к базе данных Json. Затем создаем экземпляр объекта отчета. Создаем экземпляр объекта json коннекшена. Задаем его свойство ConnectionString – по сути просто ссылка на файл. В нашем случаем файл расположен в папке App_Data в проекте. Функция CreateAllTables подгружает все таблицы из источника.
Далее нам нужно добавить созданное подключение в коллекцию подключений отчета и зарегистрировать источник данных в отчете.
Важно, именно сейчас загрузить шаблон отчета. Если сделать перед добавлением подключения в коллекцию подключений отчета, то трюк с подменой не получится. После загрузки шаблона подготавливаем отчет к показу и показываем.
В результате мы имеем построенный отчет, источник данных которого был изначально настроен на другую строку подключения. Таким образом мы можем подменить строку подключения в любом отчете, не заботясь о расположении баз данных по указанным в отчетах путям.