У меня есть отчет SSRS, который отображается пользователям в элементе управления ASP.NET ReportViewer. Отчет имеет много параметров, и мы используем подсказки параметров, которые предлагает элемент управления ReportViewer. В зависимости от определенного параметра отчета нам нужно только запросить у пользователя подмножество остальных параметров отчета.Проблема при попытке показать/скрыть параметры в элементе управления ASP.NET ReportViewer
Мы могли бы использовать связанные отчеты и скрыть соответствующие параметры, но есть много возможных комбинаций с этим первым параметром (это многозначный), поэтому мы бы не сделали этого. Вместо этого у нас есть ASP.NET ListBox, который управляет первым параметром, и когда он изменяется, мы используем функцию ReportViewer.ServerReport.SetParameters(), чтобы скрыть/показать параметры (она берет в массиве ReportParameter и конструкторе ReportParameter берет логическое значение, чтобы скрыть/показать параметр).
Вот проблема. Все отлично работает в нашей среде разработки. Когда мы развертываем отчет и сайт ASP.NET в производственной среде, параметры никогда не отображаются, когда вызываются вызовы SetParameters(). Мы знаем, что код вызывается, потому что мы поставили некоторый вывод отладки, чтобы убедиться. Код для скрытия параметров работает нормально. Это просто код, который должен вызывать определенные параметры для отображения снова, не работает. Он не только не отображает подсказки параметров, но свойство Visible этого параметра не получает значение true (проверяется с помощью ReportViewer.ServerReport.GetParameters()).
У нас есть SQL Server 2005 SP3, установленный в обеих средах, и та же версия средства просмотра отчетов (Microsoft.ReportViewer.WebForms.dll). Любые идеи, что может быть неправильным? Любые обходные идеи? Если у вас есть вопросы, оставьте комментарии.
Редактировать: После дальнейшего расследования мы дополнительно изолировали проблему. Я сделал простой отчет только с одним параметром без какого-либо соединения с БД. Затем я создал страницу aspx с двумя кнопками, а элемент управления ReportViewer подключился к этому отчету. 1 скрывает параметр, а кнопка 1 показывает параметр (используя функцию SetParameters(), как указано выше). Даже при таком простом сценарии кнопки hide/show отлично работают в среде разработки, но у нас все еще есть одна и та же проблема в рабочей среде (кнопка show не работает). Мы также пробовали это на другом сервере в сети в производственной среде, и у нас такая же проблема. Таким образом, все работает отлично в среде разработки, но на двух разных серверах за пределами этой среды мы, похоже, сталкиваемся с той же проблемой.
Редактировать2: Ниже приведен код для страницы отчета об испытаниях. На странице есть ReportViewer, 2 кнопки и метка для вывода отладки. Когда показ скрытых параметров не работает, метка даже показывает, что свойство Visible по-прежнему ложно после вызова ShowParameter.
Public Partial Class TestReportPage
Inherits System.Web.UI.Page
Public Sub HideParameter(ByVal parameterName As String)
Dim parameters As ReportParameterInfoCollection = ReportViewer1.ServerReport.GetParameters()
ReportViewer1.ServerReport.SetParameters(New ReportParameter() {New ReportParameter(parameterName, GetParameterDefaults(parameterName, parameters), False)})
parameters = ReportViewer1.ServerReport.GetParameters()
lblTest.Text &= "Hide param " & parameterName & "; Is Visible: " & parameters(parameterName).Visible & "<br>"
End Sub
Public Sub ShowParameter(ByVal parameterName As String)
Dim parameters As ReportParameterInfoCollection = ReportViewer1.ServerReport.GetParameters()
ReportViewer1.ServerReport.SetParameters(New ReportParameter() {New ReportParameter(parameterName, GetParameterDefaults(parameterName, parameters), True)})
parameters = ReportViewer1.ServerReport.GetParameters()
lblTest.Text &= "Show param " & parameterName & "; Is Visible: " & parameters(parameterName).Visible & "<br>"
End Sub
Public Shared Function GetParameterDefaults(ByVal parameterName As String, ByVal parameters As Microsoft.Reporting.WebForms.ReportParameterInfoCollection) As String()
Dim paramDefaults() As String = {}
Dim i As Int16 = 0
For Each paramValue As String In parameters(parameterName).Values
ReDim Preserve paramDefaults(i)
paramDefaults(i) = paramValue
i = i + 1
Next
Return paramDefaults
End Function
Protected Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
HideParameter("foo")
End Sub
Protected Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ShowParameter("foo")
End Sub
End Class
У вас есть пример кода того, как вы устанавливаете параметры со страницы ASP.NET? Может быть, ваш простой тест. Я столкнулся с подобными проблемами, но проблема оказалась не в отчете, а в коде. – Mozy
Я редактировал вопрос с кодом для тестовой страницы ASP.NET. –