SSRS 2008多行数据在报告中显示为一行

时间:2012-03-29 16:48:53

标签: reporting-services

我有一个报告,它将一个数据字段返回到Tablix控制字段。数据字段包含数据库中的多行信息。以下示例。 在SQL Server中,
“丹酋长 - 首席执行官 - 印第安纳办事处”
“丹酋长 - ”& vbcrlf& “Ceo”& “ - 印第安纳办事处”

vbcrlf不在SQL Server中显示,但我已通过在SSRS中使用instr()确认它们存在。

我希望数据显示如下。我可以删除连字符和空格 丹酋长 CEO
印第安纳办事处

但在SSRS报告中,它显示在一行上。我选择/打开了自动增长复选框,但仍然没有。

欢迎任何想法。

感谢。

4 个答案:

答案 0 :(得分:4)

有两个方向可以实现这一目标。您需要的方法取决于您是否将文本格式化为HTML(右键单击单元格中的文本,选择Placeholder Properties。如果标记类型为HTML,请使用下面的第一种方法。)

听起来您将这些内容呈现为HTML,因为如果您设置为无,则会显示vbcrlf。

将文字视为HTML:

您需要使用<br/>标记替换vbcrlf。如果您在报表中使用嵌入代码,这是最简单的。在报告的代码中创建一个函数:报告菜单,报告属性 - &gt;代码部分。

Public Function ReplaceLineBreaks(ByVal s As String) As String
   Dim strBuilder As New System.Text.StringBuilder(s)
   If s.Contains(vbCrLf) Then
      strBuilder.Replace(vbCrLf, "<br/>")
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

现在设置您的字段以使用此代码: = Code.ReplaceLineBreaks(字段!ColumnA.Value)

如果您不将文字视为HTML

在这种情况下应该保留并显示vbCrLf,所以如果你真的存储在SQL中,那么你应该没问题。如果你在字符串中有一些其他字符,你可以改变我上面提供的ReplaceLineBreaks函数来插入vbCrLf。

答案 1 :(得分:1)

如果您的表中有vbCRLF,那么这不是解决问题的正确方法。 SSRS将vbcrlf呈现为字符串,而不是以此方式作为回车换行符。

您应该将3个单独的列返回到数据集:

姓名,角色,办公室

Dan Cheif,印度办事处首席执行官

然后,在Tablix中,您可以在需要显示此行的位置执行表达式:

=DataSet!Name.Value & vbCRLF & DataSet!Role.Value & vbCRLF & DataSet!Office.Value

答案 2 :(得分:1)

我在SSRS上没有太多工作。但有一点我建议在该文本字段中创建一个占位符。然后,您可以使用html样式标记将数据分成多行。但是,当然,我相信只有在同一个字段中填充多个表达式时才能使用此方法。没有尝试过数据库本身包含多行信息的情况。希望下面的链接能更好地解释这个过程。

http://sqlserverpedia.com/blog/sql-server-bloggers/using-different-formats-within-a-single-textbox-in-ssrs/

您可以在此处查看ssrs中支持的所有html标记

http://social.msdn.microsoft.com/Forums/en/sqlreportingservices/thread/3bffb40a-c67f-4cb2-a3dd-ce711200e8db

答案 3 :(得分:1)

在我的例子中,我输出到文本框的Full_Address字段包含CR(CHAR(10),在SQL术语中)但不包含LF(CHAR(13))。 (通过使用CHARINDEX函数发现了这一点。) 所以我认为完整地址的各行不是SSR输出上的换行符。在横向讲话时,它在SSRS报告的文本框字段中用完时就有点破损。

所以我在存储过程中所做的是: SELECT ... REPLACE(Full_Address,CHAR(13),CHAR(10)+ CHAR(13))AS FullAddress,...