2017-06-01 2 views
0

Ich entwickle einen Bericht basierend auf Daten, die über ein Onlineformular an einen SQL Server gesendet werden. Ein Abschnitt ist eine Liste von Kontrollkästchen, um die erforderlichen Dienste anzuzeigen. Ich habe einen Ausdruck im Berichts-Generator geschrieben, um die Felder in einer Spalte zu verketten, und entschied mich zum leichteren Lesen im Bericht, einen Wagenrücklauf + (VbCrLf) hinzuzufügen.Report Builder-Ausdruck zum Entfernen von Zeilenumbrüchen, wenn das Feld leer ist

= Felder! Service1.Wert + (VbCrLf) + Service2.Wert + (VbCrLf) + Service3.Wert + (VbCrLf) + Service4.Wert ETC. ETC.

Problem ist, dass jedes Feld zu einem Wagenrücklauf führt, so dass es große Lücken geben kann, wenn der 1., 8. und 12. Dienst ausgewählt werden.

Gibt es eine Möglichkeit, den Ausdruck VbCrLf zu ignorieren, wenn das Feld Null oder Leer ist? Oder irgendwelche Vorschläge für eine andere oder bessere Lösung.

Antwort

0
  1. in dem Entwurf v iew, klicken Sie mit der rechten Maustaste auf die Entwurfsoberfläche außerhalb des Berichtsrands, und klicken Sie auf Berichtseigenschaften.
  2. Klicken Sie auf Code.
  3. In Benutzerdefinierte Code, geben Sie den Code

.

Public Function ConcatFields(ByVal s As String) As String 
    If String.IsNullOrEmpty(s) Then 
     Return "" 
    End If 
    Return s + Environment.NewLine 
End Function 

dann die Funktion aufrufen wie folgt:

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

Hallo Sergio. Das hat auch nicht funktioniert, gibt einen Fehler aus: Der GroupExpression-Ausdruck für den Tablix "Tablix1" enthält einen Fehler: [BC30451] Name SERVICE2 nicht deklariert. (Ich benutze nur SERVICE2, um Verwirrung zu vermeiden, ich verwende den richtigen Feldnamen im Ausdruck). – Andy

+0

Sie müssen Service2 wahrscheinlich als 'Fields! Service2.Value' aufrufen. Probieren Sie die Funktion aus, indem Sie nur ein Feld verketten und sehen, ob das Ihnen einen Fehler gibt ... –

+0

Hallo Sergio, ich war zwei Wochen im Urlaub, also konnte ich nicht zu dir zurück kommen. Ihr letzter Vorschlag hat PERFEKT funktioniert. Vielen Dank. – Andy

0

mt erste Reaktion war, den gesamten Ausdruck in einer Ersetzen-Funktion zu wickeln, und ersetzen Sie 2 aufeinander folgende VbCrLf mit einem einzigen

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

Das Problem hierbei ist, dass Sie drei leere Werte noch 2 neue Linien erzeugen würden, so konnte man entweder Nest der ersetzen-Funktion, so dass es gilt 2 oder 3 mal, oder Sie konnten eine Inline-IF tun verwenden, um jeden Wert zu testen, bevor eine neue Zeile hinzufügen

=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

könnten Sie wahrscheinlich verkürzen diese mit '... IIF (! LEN (Fields Service2.Value) = 0, "", VbCrLf) .. ..' –

+0

Hi Jamie und Alan, probierten die Inline aus Wenn es aber nicht klappte. Änderte es zu: – Andy

+0

Hallo Jamie und Alan, probierten die Inline aus Wenn es aber überhaupt nicht funktionierte. Änderte es zu: = IIF (Felder! SERVICE1.Value) ist nichts, "", (Felder! SERVICE1.Value) & VBCRLF & IIF (Felder! SERVICE2.Value) ist nichts, "", (Felder! SERVICE2.Value) & VBCRLF) & IIF (Felder! SERVICE3.Value) Ist nichts, "", (Felder! SERVICE3.Value) & VBCRLF) & IIF (Felder! SERVICE4.Value) Ist nichts, "", (Felder! SERVICE4 .Value) & VBCRLF etc. Das hat die Wagenrückläufe aber auch die Lücken geschaffen. Ich werde es morgen nochmal versuchen. – Andy

Verwandte Themen