Проблема с высотой ReportViewer. Скрытие полос прокрутки

Я использую службы отчетов MSSQL 2005, и в этом случае мне нужно отображать некоторые отчеты на странице ASP.NET с помощью элемента управления ReportViewer (я думаю, это единственный способ, верно?).

Проблема в том, что я не могу заставить свойство SizeToReportContent работать. При отображении отчета я получаю вертикальную полосу прокрутки, потому что отчет слишком велик. Похоже на окно iframe. Поиск в гугле кажется ошибкой. Это можно исправить, установив AsyncRendering на false, но я этого не хочу. Мне нужно другое решение.

Мне было интересно, можно ли установить высоту элемента отчета с помощью JavaScript после загрузки отчета?

Или вы знаете другое решение? Это действительно раздражает.

Заранее спасибо.


person Tommy Jakobsen    schedule 04.09.2009    source источник
comment
Мне было интересно, были ли эти проблемы исправлены в ReportViewer, поставляемом с VS2010 Beta 1, и могу ли я использовать это в ASP.NET 3.5 (VS2008)?   -  person Tommy Jakobsen    schedule 05.09.2009


Ответы (4)


Вы можете установить высоту с помощью javascript и оставить Async = true. Я использую это сейчас в версии 2008 года. Вот код, который я использую:

<script language="JavaScript" type="text/JavaScript">
    function doResize() {
        var viewer = document.getElementById("<%=ReportViewer1.ClientID %>");
        var htmlheight = document.documentElement.clientHeight; 
        viewer.style.height = (htmlheight - 150) + "px";
    }

    window.onresize=function resize()
    { 
        doResize();
    }
</script>

<rsweb:ReportViewer ID="ReportViewer1" BackColor="#f2f2f2" 
    InternalBorderStyle="Solid" InternalBorderColor="Gray" ProcessingMode="Remote" 
    AsyncRendering="true" Width="100%" runat="server" 
    meta:resourcekey="ReportViewer1Resource1">
    <ServerReport  />        
</rsweb:ReportViewer>

<script language="JavaScript" type="text/JavaScript">
    doResize();
</script>

Однако это не работает в VS2010 ReportViewer. Я пытаюсь найти решение для этого.

person ericvg    schedule 23.03.2010
comment
Вы когда-нибудь находили решение для VS2010 ReportViewer? - person Kyle; 01.08.2012

Я не могу полностью вспомнить, каким путем идти, но вам либо нужно изменить ReportViewer с Asynch на синхронный рендеринг. Я занимался этим около 3 лет назад и думаю, что мы это сделали.

person StrateSQL    schedule 05.09.2009
comment
Но мне бы очень хотелось этого избежать. - person Tommy Jakobsen; 05.09.2009
comment
Проблема в том, что когда отчет рендерится, он не знает, насколько он будет большим. Пока рендеринг не завершен, он этого не знает. Тем не менее, может быть Java-решение, которое появилось с тех пор, как мне в последний раз приходилось с этим сталкиваться. - person StrateSQL; 06.09.2009
comment
Спасибо, у меня это сработало. Как сказал Томми - это не идеально, но если вы не знаете, насколько велик отчет, вы мало что можете сделать. Другой вариант - динамически устанавливать высоту средства просмотра, получая высоту окна браузера клиента с помощью Javascript. - person Stefan Mohr; 02.02.2010

Сегодня столкнулся с той же проблемой со средством просмотра отчетов за 2010 год. Кажется, это хорошо работает ...

  <style type="text/css">
        .fixScrollBarBug div div
        {
            overflow: visible;
        }

        .fixScrollBarBug div div div
        {
            overflow: hidden;
        }
    </style>

<rsweb:reportviewer ID="reportMonthlyReport" runat="server" ProcessingMode="Remote"
      CssClass="fixScrollBarBug"  AsyncRendering="false" SizeToReportContent="true"/>
person Theodosius    schedule 21.08.2012

Предположительно это решается с помощью ReportViewer в комплекте с Visual Studio 2010 beta 2:

http://blogs.msdn.com/brianhartman/archive/2010/01/21/asyncrendering-and-all-the-baggage-that-comes-with-it.aspx

Тем не менее, я попытался перейти на новую версию и столкнулся с огромным количеством новых интересных и различных кроссбраузерных проблем. Однако он может работать достаточно хорошо для того, что вы пытаетесь сделать.

person Stefan Mohr    schedule 05.03.2010