2

我们的一些报告在 Firefox 中无法正确显示 - 第一列缺少任何 css。经过调查,我发现:

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

当我删除 style="HEIGHT:6.93mm" 时,它会在 Firefox 中正确呈现。

根据 JudyX在 2006 年 2 月 13 日星期一晚上11:54 发布的帖子:

报告中的第一列无法正确设置样式。报表查看器控件需要为所有表格行指定“高度”。不幸的是,它不是将此应用于 table-row 元素,而是应用于该行中的第一个 table-cell。当它作为样式属性应用时,它与我们在其他地方设置的样式冲突。

有没有人找到解决方案?

4

5 回答 5

2

解决方案并不是真正的解决方案。这是一个黑客。

当行为出现时,定义一个新的第一列。它应该具有以下属性:

  1. 空 - 没有文字,没有表达等
  2. 设置最小宽度(0.03125 英寸)
  3. 如果其他单元格上有边框样式,则设置新第一个单元格的右边框以匹配,同时为其他单元格设置白色/等。
于 2009-07-22T15:49:50.813 回答
2

我可以确认 SSRS 2005 仍然会发生这种情况。Firefox 并不是唯一不会按照报表设计器的预期呈现的浏览器。显然,如果在一个元素上分配了多个样式属性,则 IE7(可能还有 IE6)假定最后一个样式属性为“赢”。在这种情况下,标准模式下的 IE8 和 Firefox 假定第一个样式属性为“赢”。我会假设所有符合标准的浏览器都会做出与 IE8 和 Firefox 相同的选择,尽管我们的团队尚未对此进行测试。

我还没有找到关于修补程序的解决方案,但我确实有办法防止坏的 HTML 进入浏览器。OMG Ponies - 感谢您将链接发布到 JudyX 的帖子。Wodeh 在该帖子的 3/4 处给出了一个很好的解决方案 - 不幸的是,尚不完全清楚如何使用发布的代码。

该方法是在包含ReportViewer 控件的页面上使用响应过滤器。过滤器可以访问将发送到浏览器的原始 HTML,这提供了直接修改 HTML 的机会,而不必导致新的第一列技巧。在我们的 Page_Load 方法中,我们使用以下代码设置 Response.Filter 属性:

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

CorrectSSRSIssuesResponseFilter 类定义如下,主要基于 Wodeh 帖子中的代码。秘诀在于 Write() 方法,它使用 RegEx 消除第一个样式属性:

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);
        }

    }
}
于 2010-04-29T02:16:20.817 回答
0

这是一个 CSS 样式问题。过去,我已使用此帖子中的信息成功地对此进行了修复:

您基本上必须找到报告服务的 css 文件(默认情况下,位于报告服务器上的 C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportManager\Styles\ReportingServices.css),然后添加班级规则:

.DocMapAndReportFrame
{
min-height: 860px;
} 
于 2009-07-16T08:07:38.527 回答
0

试试控制 AsyncRendering="true"ReportViewer

通过异步渲染,生成的 HTML 没有两个样式标签——它使用 sytle 标签来表示高度,而所有其他样式都通过元素class上的属性应用。td

于 2013-05-20T20:19:13.530 回答
0

在我的情况下,一个更简单的解决方法解决了这个问题。只需在损坏的行下方添加另一行并设置 Visibility:Hidden = True。

祝你好运!

于 2013-09-02T10:13:52.517 回答