На нашем веб-сайте мы используем элемент управления ReportViewer для отображения отчетов SSRS. Когда пользователь щелкает ссылку для отчета, код заполняет некоторые исходные переменные для представления правильного отчета, например:
reportViewerNew.ServerReport.ReportServerUrl = new Uri(ReportURL);
reportViewerNew.ServerReport.ReportPath = ReportPath + ReportName;
Каждый отчет был создан по крайней мере с одним параметром с именем «userName». В отчете это скрытый параметр отчета, и значение передается в хранимую процедуру, которая заполняет отчет, чтобы мы могли отслеживать, кто запрашивает информацию.
Итак, в коде у нас есть блок Switch загрузить массив (длина зависит от того, какой отчет вызывается), который имеет как минимум это «userName»:
default:
RptParameters = new ReportParameter[1];
RptParameters[0] = new ReportParameter("userName", UserID);
break;
С установленным массивом мы затем передаем предварительно загруженные значения в параметры отчета с помощью метода SetParameters:
reportViewerNew.ServerReport.SetParameters(ReportParameters());
Все это прекрасно работает, и когда отчет запускается, я могу проверить нашу базу данных и увидеть, что значение "userName" было передано в наше отслеживание.
Однако ... этот перестает работать , если отчет требует некоторого взаимодействия с пользователем для запуска отчета - например, выбор параметра в одном раскрывающемся меню загружает зависимый раскрывающийся список, выбирая дату, которая загружает раскрывающийся список с соответствующими вариантами, и т. д. c. Кажется, что эта «внутренняя обратная передача» отчета приводит к тому, что скрытый параметр отчета «userName» теряет свое значение, а затем передается учетная запись, которую мы используем для подключения к базе данных.
Я разместил точка останова в коде в строке if (!Page.IsPostBack)
для перехвата «обратной передачи» отчета, но это не срабатывает ... похоже, оно является внутренним для элемента управления ReportViewer. Я пытался найти какой-нибудь EventHandler для этого постбэка в документации (https://docs.microsoft.com/en-us/dotnet/api/microsoft.reporting.webforms), но не видел его.
Кто-нибудь знает, почему параметр отчета теряет свое значение, как это предотвратить, или мне нужно по-другому с этим справиться?