如果字段为空,则报表生成器表达式以删除换行符

时间:2017-06-01 12:53:28

标签: sql-server reporting-services

我正在根据通过在线表单提交给SQL Server的数据开发报告。一部分是复选框列表,用于指示所需的服务。我在Report Builder中编写了一个表达式,将字段连接成一列,为了便于在repor中读取,我决定添加一个回车+(VbCrLf)。

= Fields!Service1.Value +(VbCrLf)+ Service2.Value +(VbCrLf)+ Service3.Value +(VbCrLf)+ Service4.Value ETC. ETC。

问题是每个字段都会导致回车,因此如果选择第1,第8和第12服务,可能会出现大量差距。

如果字段为Null或Blank,是否有办法使表达式忽略VbCrLf?或者针对不同或更好的解决方案的任何建议。

2 个答案:

答案 0 :(得分:0)

mt第一反应是将整个表达式包装在替换函数中,并用一个连续替换2个连续的VbCrLf

=replace(Fields!Service1.Value + (VbCrLf) + Service2.Value + (VbCrLf) + 
Service3.Value + (VbCrLf) + Service4.Value,Vbcrlf+VbCrLf,VbCrLf)

这里的问题是你3个空值仍然会产生2个新行,所以你可以嵌套替换函数使它适用2或3次,或者你可以使用内联IF来测试每个添加新行之前的值

=Fields!Service1.Value + iif(Service2.Value is nothing or Service2.Value = "","",VbCrLf)  + Service2.Value + iif(Service3.Value is nothing or Service3.Value = "","",VbCrLf) etc etc

答案 1 :(得分:0)

  1. 在“设计”视图中,右键单击报表边框外的设计图面,然后单击“报表属性”。
  2. 点击代码。
  3. 在自定义代码中,输入代码
  4. Public Function ConcatFields(ByVal s As String) As String
       If String.IsNullOrEmpty(s) Then
          Return ""
       End If
       Return s + Environment.NewLine
    End Function
    

    然后按如下方式调用函数:

    =Code.ConcatFields(Fields!Service1.Value) + Code.ConcatFields(Service2.Value) + Code.ConcatFields(Service3.Value) + Code.ConcatFields(Service4.Value) ETC. ETC.