我有一个报告,它将一个数据字段返回到Tablix控制字段。数据字段包含数据库中的多行信息。以下示例。
在SQL Server中,
“丹酋长 - 首席执行官 - 印第安纳办事处”
“丹酋长 - ”& vbcrlf& “Ceo”& “ - 印第安纳办事处”
vbcrlf不在SQL Server中显示,但我已通过在SSRS中使用instr()确认它们存在。
我希望数据显示如下。我可以删除连字符和空格
丹酋长
CEO
印第安纳办事处
但在SSRS报告中,它显示在一行上。我选择/打开了自动增长复选框,但仍然没有。
欢迎任何想法。
感谢。
答案 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样式标记将数据分成多行。但是,当然,我相信只有在同一个字段中填充多个表达式时才能使用此方法。没有尝试过数据库本身包含多行信息的情况。希望下面的链接能更好地解释这个过程。
您可以在此处查看ssrs中支持的所有html标记
答案 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,...