2017-06-01 163 views
0

我正在開發基於通過聯機表單提交給SQL Server的數據的報表。一節是用於指示所需服務的複選框列表。我在報表生成器中編寫了一個表達式,將這些字段連接成一列,爲了便於在報告中讀取,決定添加一個回車+(VbCrLf)。如果字段爲空,則使用Report Builder表達式刪除換行符

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

問題在於每個字段都會導致回車,因此如果選擇第1,第8和第12服務,可能會出現大量空白。

如果字段爲空或空白,是否有辦法讓表達式忽略VbCrLf?或者有關不同或更好的解決方案的任何建議。

回答

0
  1. 在設計v在測試每個值用鼠標右鍵單擊報告邊界外的設計圖面,然後單擊報告屬性。
  2. 點擊代碼。
  3. 在自定義代碼中,輸入代碼

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. 
+0

嗨塞爾吉奧。這也沒有工作,拋出一個錯誤:Tablix'Tablix1'的GroupExpression表達式包含一個錯誤:[BC30451]名稱SERVICE2未聲明。 (我只是使用SERVICE2來避免混淆,我在表達式中使用了正確的字段名稱)。 – Andy

+0

您可能必須將Service2作爲「Fields!Service2.Value」調用。嘗試通過連接只有一個領域的功能,看看是否給你一個錯誤... –

+0

嗨塞爾吉奧,我已經休假了兩個星期,所以無法回覆給你。你最後的建議很有效。謝謝。 – Andy

0

公噸的第一反應是包裹在一個替換功能的整體表達,和具有單一個

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

這裏的問題是更換連續2 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 
+0

你也許可以縮短這個使用'... IIF(!LEN(場Service2.Value)= 0, 「」,VbCrLf).. ..' –

+0

嗨傑米和艾倫,嘗試內聯如果但它沒有奏效。修改爲: – Andy

+0

嗨傑米和艾倫,嘗試內聯如果但它根本沒有工作。將它修改爲:= IIF(Fields!SERVICE1.Value)是Nothing,「」,(Fields!SERVICE1.Value)&VBCRLF&IIF(Fields!SERVICE2.Value)Is Nothing,「」,(Fields!SERVICE2.Value )&VBCRLF)& IIF(Fields!SERVICE3.Value)是Nothing,「」,(Fields!SERVICE3.Value)&VBCRLF)IIF(Fields!SERVICE4.Value)是Nothing,「」,(Fields!SERVICE4 .Value)&VBCRLF等。這確實創造了回車,但也有差距。我明天再試一次。 – Andy

相關問題