Как реализовать WinForms.ReportViewer с такими же параметрами из конструктора отчетов VS - PullRequest
0 голосов
/ 22 апреля 2020

Я создал проект отчета с использованием Microsoft Visual Studio 2017 как часть решения, содержащего другие проекты отчетов. В VS он запустил мастер отчетов, в котором я настроил New data source и указал его на сервере под управлением Microsoft SQL Server 2016.

Отчет содержит несколько параметров, некоторые из которых имеют значение по умолчанию / доступно Значения в виде Specifi c Значения или Значения из запроса. Некоторые из этих значений также являются функциями VB, например значение по умолчанию StartDate =DateAdd("H",-24,Now()) и значение по умолчанию EndDate =Now()

У меня есть 4 набора данных, один из которых используется для заполнения доступных и стандартных значений параметра, остальные 3 используются для получения данных из базы данных, которая заполняет матрицу (4 разных графика). Все наборы данных Query types установлены на Text, и я записал SQL непосредственно в отчет, поскольку у меня нет возможности добавлять хранимые процедуры в базу данных.

Отчет также содержит пользовательский код, написанный в свойствах отчета, который используется для форматирования некоторых данных (для преобразования секунд в D: Hr: m: s.000) или для окрашивания ячеек матрицы для выделения внешних данных. Наконец, ячейки матрицы имеют действие для запуска отчета Drillthrough, которое также было разработано так же, как и основной отчет.

ReportData

Через Visual Studio, у меня нет проблем с переключением между страницами Design и Preview, поэтому я могу успешно протестировать отчет на удаленной базе данных. Все функции работают отлично, и я могу настроить параметры, запустить отчет, сохранить отчет в excel / pdf / ect через VS Preview.

Я пытаюсь добавить Microsoft.Reporting.WinForms.ReportViewer к отдельный C# проект. Я точно не знаю, что службы SSRS были установлены на сервере, работающем SQL 2016, но из-за возможности запуска отчета через VS в виде файла .rdl, я подозреваю, что это так.

Элемент управления WinForms.ReportViewer запрашивает Report Server Url, если я выбираю Remote, но если я выбираю Local, согласно различным исследованиям, для отчета потребуется тип файла .rdlc, и согласно этому ответу: { ссылка }, что потребовало бы кода для ручной обработки всех элементов управления параметрами отчета.

Я начал писать некоторый код для обработки XML всего файла .rdl для генерации элементов управления из параметры, однако для некоторых параметров, таких как StartDate, мне бы пришлось обработать выражения VB в C#. Хотя я мог бы написать это для работы в приложении C#, это сделало бы отчет менее функциональным в конструкторе отчетов. Кроме того, некоторые наборы данных имеют формулы для значения параметра

=Split(Join(Parameters!ReportParameterFaultCategories.Value, ","),",")

Это связано с тем, что доступными значениями параметра являются разделенные запятыми списки целых чисел, в которых указана ссылка к ним в запросе SQL относятся

where values in (@ReportParameterFaultCategories)

WinForms_ReportViewer

...