0

У меня есть отчет 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 
+0

У вас есть пример кода того, как вы устанавливаете параметры со страницы ASP.NET? Может быть, ваш простой тест. Я столкнулся с подобными проблемами, но проблема оказалась не в отчете, а в коде. – Mozy

+0

Я редактировал вопрос с кодом для тестовой страницы ASP.NET. –

ответ

0

Просто для всех, кто когда-либо имеет этот вопрос, вот почему мы с этим вопросом:

Проблема была из-за разницы в окружающей среде. Несмотря на то, что DLL ReportViewer была скопирована в папку bin проекта (и, таким образом, скопирована туда, где был размещен проект), эта проблема с параметрами является ошибкой в ​​более старых версиях элемента управления ReportViewer. Чтобы устранить эту проблему, вам нужно получить Microsoft Report Viewer Redistributable 2005 SP1. По-видимому, это исправление было установлено в среде разработки. По какой-то причине DLL ReportViewer была той же версией с обеих сторон. Это может быть связано с тем, что на DLL действительно был доступ из другого места.

Смежные вопросы