Проблема ReportViewer в Google Chrome - PullRequest
1 голос
/ 26 января 2010

Я использую Reportviewer в своем приложении asp.net mvc (C #). В IE и Firefox средство просмотра отчетов выглядит нормально.

Но в Chrome заголовок и тело сокращаются. Я смог исправить проблему с отображением заголовка, как предложено в http://www.mazsoft.com/blog/post/2009/08/13/ReportViewer-control-toolbar-in-Google-Chrome-browser.aspx.

  if ($.browser.safari) {
      $("#ReportViewerControl table").each(function(i, item) {
         $(item).css('display', 'inline-block');
      });
  }

Но часть Body (Viewer) по-прежнему находится на половине экрана. Кажется, проблема в ширине пустой секунды td таблицы:

<table cellspacing="0" cellpadding="0">
  <tbody>
    <tr>
      <td onpropertychange="ShowFixedHeaders()" id="oReportCell">....Some Data...</td>
      <td height="0" width="100%"></td>
    </tr>
  </tbody>
</table>

Второй тд в приведенной выше таблице пуст с шириной 100%, это может быть причиной ошибки в chrome. Как можно убрать ширину второго тд или есть какое то исправление для этого? ReportViewer Design http://www.freeimagehosting.net/uploads/13114a4f00.png

Как я могу получить доступ к элементу внутри вложенного iframe?

Ответы [ 4 ]

6 голосов
/ 05 сентября 2012

Если средство просмотра отчетов не отображает данные или они не отображаются ни в одном браузере, просто выполните следующие действия на странице ASP.NET:

Заменить:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

со следующим тегом:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3 голосов
/ 10 августа 2010

У меня была такая же проблема, и я исправил ее с помощью jQuery. Поскольку средство просмотра отчетов использует iframes, нелегко добраться до элемента <TD>, который необходимо удалить. Я попробовал различные методы и, наконец, остановился на следующем взломе. Возможно, это не так хорошо, как может быть, но у меня работает.

Сначала я обертываю средство просмотра отчетов в <DIV> и скрываю его:

<div id="rpt-container" style="display: none;">
    <rsweb:ReportViewer ID="rptViewer" Width="99.9%"    BackColor="#eeeeee" 
            runat="server" ShowExportControls="False"> 
    </rsweb:ReportViewer>
 </div>

Затем я добавил следующий фрагмент jQuery, чтобы найти удаляемый элемент, позволяющий выполнить успешный рендеринг в Chrome.

<script type="text/javascript"> 
    $().ready(function() {
         setTimeout( function(){  
             $('td#oReportCell', window.parent.frames[0].frames[1].document).next().remove();  
             $("#rpt-container").fadeIn();
          }, 300);  //slight delay to allow the iframe to load
     });
 </script>

Я пытался использовать плагин frameReady, но мне не повезло. В качестве компромисса я просто установил задержку около 300 миллисекунд, прежде чем пытаться извлечь элемент DOM внутри iframe. Если вы не скрываете / не исчезаете в отчете, вы видите некрасивую анимацию при удалении элемента.

2 голосов
/ 25 апреля 2012

У меня похожая проблема с ReportViewer на моей странице aspx. В IE9 у меня также все поля в отчете сокращены, потому что последний элемент TD в таблице имеет width=100%.

На моей странице Aspx я использую

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Когда я удаляю этот элемент DOCTYPE, поля в отчете не сокращаются.

1 голос
/ 26 января 2010

Попробуйте с большим количеством jQuery, может быть

$().ready(function() {
    $('#ReportViewerControl table td[width="100%"]').attr('width','');
});

Хотя это, вероятно, повлияет на другие элементы отчета?

...