2

最初の列にはCSSがありません。私はスタイル=「HEIGHT:6.93ミリメートル」を削除するとSSRS:2005、最初の列にCSSが適用されていません

<tr> 
    <td style="HEIGHT:6.93mm" style="...">1st Column</td> 
    <td style="...">2nd Column</td> 
    <td style="...">3rd Column</td> 
</tr> 

を:調査した後、私は見つけることだ、それは、Firefoxで正しくレンダリングされます。

パーJudyXのポストhere on Monday, February 13, 2006 11:54 PM

レポートの最初の列が正しくスタイリングすることができません。レポートビューアコントロールでは、すべてのテーブル行に「高さ」を指定する必要があります。残念ながら、これはtable-row要素ではなく、その行内の最初のtable-cellに適用されます。スタイル属性として適用すると、他の場所で設定したスタイルと衝突します。

誰にも解決策が見つかりましたか?

答えて

2

これはSSRS 2005でも引き続き発生することが確認されています。これは、レポートデザイナーが意図したとおりに表示しないブラウザだけではありません。どうやらIE7(とおそらくIE6)は、要素に複数のスタイル属性が割り当てられている場合、最後のスタイル属性を "勝つ"と仮定しています。 IE8の標準モードとFirefoxは、この状況で「勝利」する最初のスタイル属性を想定しています。私たちのチームはこれをテストしていませんが、すべての標準準拠のブラウザはIE8とFirefoxと同じ選択をすると思います。

解決策の点で解決策が見つかりませんでしたが、悪いHTMLがブラウザに表示されないようにする方法があります。 OMG Ponies - JudyXのポストへのリンクを投稿してくれてありがとう。 Wodehは、そのポストの3/4について、良い解決策を提示しました。残念ながら、投稿されたコードの使い方は完全にはっきりしていませんでした。

ReportViewer Controlを含むページでresponse filterを使用する方法があります。フィルタは、ブラウザに送信される生のHTMLへのアクセス権を持ち、新しい最初の列トリックにならずに直接HTMLを変更する機会を提供します。 Page_Loadメソッドでは、レスポンスを設定します。

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Filter = new CorrectSSRSIssuesResponseFilter(Response.Filter); 
     if (!IsPostBack) { 
      RenderReport(); 
     } 
    } 

CorrectSSRSIssuesResponseFilterクラスは次のように定義され、主に後からWodehのコードのオフに基づいている:次のコードでプロパティをフィルタリングします。秘密のソースは、最初のスタイル属性を一掃するために正規表現を使用してwrite()メソッドにあります。

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Text; 

namespace Reports 
{ 
    public class CorrectSSRSIssuesResponseFilter : Stream 
    { 
     private Stream _sink; 
     private StringBuilder Output = new StringBuilder(); 

     public CorrectSSRSIssuesResponseFilter(Stream sink) 
      : base() 
     { 
      _sink = sink; 
     } 

     public CorrectSSRSIssuesResponseFilter() 
      : base() 
     { 
      _sink = new MemoryStream(); 
     } 

     public override bool CanRead { get { return true; } } 
     public override bool CanSeek { get { return true; } } 
     public override bool CanWrite { get { return true; } } 
     public override void Flush() 
     { 
      _sink.Flush(); 
     } 
     public override long Length 
     { 
      get { return _sink.Length; } 
     } 
     public override long Position 
     { 
      get 
      { return _sink.Position; } 
      set 
      { _sink.Position = value; } 
     } 

     public override int Read(byte[] buffer, int offset, int count) 
     { 
      return _sink.Read(buffer, offset, count); 
     } 

     public override long Seek(long offset, SeekOrigin origin) 
     { 
      return _sink.Seek(offset, origin); 
     } 

     public override void SetLength(long value) 
     { 
      _sink.SetLength(value); 
     } 

     public override void Write(byte[] buffer, int offset, int count) 
     { 
      string strBuffer = UTF8Encoding.UTF8.GetString(buffer, offset, count); 
      //A Closing HTML tag indicates the response object has finished recieving the entire content of the page 
      strBuffer = System.Text.RegularExpressions.Regex.Replace(
       strBuffer 
       , "<TD style=\"[^\"]*\" style=(?<goodStyle>\"[^\"]*\")>" 
       , "<TD style=${goodStyle}>" 
       , System.Text.RegularExpressions.RegexOptions.Compiled 
       ); 

      buffer = System.Text.Encoding.UTF8.GetBytes(strBuffer); 
      _sink.Write(buffer, offset, buffer.Length); 
     } 

    } 
} 
0

これはCSSスタイルの問題です。 this post

の情報を使用してこれまでの修正プログラムを正常に実装しました。デフォルトでは、C:\ Program Files \ Microsoft SQL Server \ MSSQLにあるレポートサービスのcssファイルを見つける必要があります。 3 \ Reporting Servicesの\ ReportManager \スタイル\ ReportingServices.cssレポートサーバー上)、およびそれには、このクラスのルールを追加します。

.DocMapAndReportFrame 
{ 
min-height: 860px; 
} 
+0

ページ生成が間違ったHTML要素にスタイル属性を導入しないようにするには、CSSの最小高さをどのように定義しますか? –

2

をソリューションは、本当にソリューションではありません。それはハックです。

現象が表示されたら、新しい最初の列を定義します。右の境界、他の細胞上の境界線のスタイリング、スタイルがある場合などテキストなし、ノー表現、

  • 設定された最小の幅(0.03125インチ)
  • -

    1. 空:これは、次の属性を持っている必要があります一致する新しい最初のセルのホワイト/ etcを設定します。
  • 0

    ReportViewer制御にAsyncRendering="true"を試してみてください。

    非同期レンダリングでは、生成されたHTMLに2つのスタイルタグがありません。これは高さにsytleタグを使用し、他のすべてのスタイルはtd要素のclass属性で適用されます。

    0

    もっと簡単な回避策が私の場合はこの問題を解決しました。破損したものの下にアノーター行を追加し、Visibility:Hidden = Trueを設定します。

    幸運を祈る!

    関連する問題