Проблема при попытке показать / скрыть параметры в элементе управления ASP.NET ReportViewer - PullRequest
0 голосов
/ 20 мая 2009

У меня есть отчет SSRS, который отображается пользователям в элементе управления ASP.NET ReportViewer. В отчете много параметров, и мы используем подсказки параметров, которые предлагает элемент управления ReportViewer. В зависимости от определенного параметра отчета нам нужно лишь попросить пользователя ввести подмножество остальных параметров отчета.

Мы могли бы использовать связанные отчеты и скрыть соответствующие параметры, но есть много возможных комбинаций с этим первым параметром (он многозначный), поэтому мы бы предпочли этого не делать. Вместо этого у нас есть ASP.NET ListBox, который управляет первым параметром, и когда его выбор изменяется, мы используем функцию ReportViewer.ServerReport.SetParameters (), чтобы скрыть / показать параметры (она принимает массив ReportParameter и конструктор ReportParameter принимает логическое значение, чтобы скрыть / показать параметр).

Вот проблема. Все отлично работает в нашей среде разработки. Когда мы развертываем отчет и сайт ASP.NET в производственной среде, параметры никогда не отображаются при вызове этих вызовов SetParameters (). Мы знаем, что код вызывается, потому что мы добавили отладочный вывод, чтобы убедиться. Код для скрытия параметров работает нормально. Это просто код, который должен заставить определенные параметры появляться снова, не работает. Он не только не отображает приглашения параметра, но и свойство Visible параметра не устанавливается в значение true (проверяется с помощью ReportViewer.ServerReport.GetParameters ()).

В обеих средах установлен SQL Server 2005 с пакетом обновления 3 (SP3) и одна и та же версия элемента управления средства просмотра отчетов (Microsoft.ReportViewer.WebForms.dll). Есть идеи, что может быть не так? Какие-нибудь обходные идеи? Если у вас есть вопросы, оставляйте комментарии.

Редактировать: После дальнейшего исследования мы еще больше изолировали проблему. Я сделал простой отчет с одним параметром без подключения к БД. Затем я создал страницу aspx с 2 кнопками и элементом управления ReportViewer, подключенным к этому отчету. Кнопка 1 скрывает параметр, а кнопка 1 показывает параметр (с помощью функции SetParameters (), как упоминалось выше). Даже при таком простом сценарии кнопки скрытия / показа работают нормально в среде разработки, но у нас все еще есть проблема в производственной среде (кнопка показа не работает). Мы также попробовали это на другом сервере в сети в производственной среде, и у нас та же проблема. Так что в среде разработки все работает нормально, но на двух разных серверах вне этой среды мы, похоже, сталкиваемся с одной и той же проблемой.

Edit2: Ниже приведен код для страницы отчета о тестировании. На странице есть 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

1 Ответ

0 голосов
/ 27 мая 2009

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

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

...