Entwickler-Ecke
Sonstiges (.NET) - Report Ausdruck
lapadula - Mo 29.05.17 14:27
Titel: Report Ausdruck
Hallo, habe da ein etwas merkwürdigen Fehler in meinem Report.
Dies ist mein Ausdruck:
C#-Quelltext
1:
| ="Veranstaltungsort für " + IIF(InStr(Fields!strTeilnehmer.Value, "Herr"), "Herrn " + (Split(Fields!strTeilnehmer.Value, " ").GetValue(2)), Fields!strTeilnehmer.Value) |
Was ich möchte:
Wenn der String im Value "strTeilnehmer" ein "Herr" enthält, dann soll "Herr" mit "Herrn" ersetzt werden.
Ich prüfe mit InStr, ob "Herr" im String enthalten ist, wenn ja dann splitte in den String bei den Leerzeichen auf und hole mit mein Value vom Array, an der 2 Stelle.
Beispiel:
Herr Max Mustermann -> mit GetValue(2) würde ich "Mustermann" bekommen. Das funktioniert soweit aber mein "FalsePart", ganz am Ende, gibt "#Error" im Report aus.
Wenn ich den zweiten Wert bei GetValue ausgeben lasse, also .GetValue(1), dann funktionert es plötzlich. Das Problem dabei ist, dass ich dann "Herrn Max" rausbekomme.
Weiss jemand warum oder kann mir da vllt eine elegantere Lösung verraten?
Delete - Mo 29.05.17 14:53
- Nachträglich durch die Entwickler-Ecke gelöscht -
lapadula - Mo 29.05.17 15:10
Nein, nicht direkt. Der Teilnehmer ist eig der Ansprechpartner, der Report bekommt die Daten von einem Objekt. Das es so ist kann ich leider nicht ändern.
Mit dem splitten ändere ich doch nichts an dem "strTeilnehmer.Value", dieser dürfte im FalsePart meines Ausdrucks (welcher ganz am ende steht) ganz normal ausgegeben werden. Dies tut er jedoch nur wenn ich im TruePart, bei .GetValue die 1 übergebe, bei 2 erscheint, wie gesagt ein Error auf dem Ausdruck.
lapadula - Mo 29.05.17 15:31
Ich wollte das wohl gerne mit einem regex lösen, leider klappt dies auch nicht, im Ausdruck wird es rot unterstrichen, obwohl es laut MS-Page gehen müsse:
Beispiel von hier:
https://msdn.microsoft.com/de-de/library/ms157328.aspx#VisualBasicFunctions
C#-Quelltext
1:
| =System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3") |
System.Text kennt er noch, alles weitere kennt er aber nicht
Nutze Visual Studio 2005 mit .NET 2.0
lapadula - Mo 29.05.17 16:48
Ok hab es soweit geschafft, hier meine Lösung:
Report anklicken -> Bericht -> Berichtseigenschaften -> Code ->
VB
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| Public Function Test(ByVal Teilnehmer As String) As String Dim r As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex("\bHerr\b|\bherr\b") Dim m As System.Text.RegularExpressions.Match = r.Match(Teilnehmer)
Dim value As String = Teilnehmer
If m.Success Then
value = value.Replace("Herr", "Herrn") return value
End If End Function |
Textbox ->
C#-Quelltext
1:
| ="Veranstaltungsort für " + IIF(InStr(Fields!strTeilnehmer.Value, "Herr"),Code.Test(Fields!strTeilnehmer.Value), Fields!strTeilnehmer.Value) |
Ich prüfe doppelt aber egal, hauptsache es geht nun :D
Was mich stört ist, dass man keinen c# Code im Report schreiben kann und vb kann ich nicht und will ich ehrlich gesagt nicht können.
Moderiert von
Th69: C#- durch Code-Tags ersetzt
Delete - Mo 29.05.17 17:59
- Nachträglich durch die Entwickler-Ecke gelöscht -
lapadula - Mo 29.05.17 19:10
Also in c# muss man das eh nicht übersetzen, weil man benutzerdefinierten Code im ReportViewer nur in VB schreiben kann. Ich mag VB nicht so, die Syntax ist mir ein wenig zu umständlich, musste jede Kleinigkeit googlen.
Kann sein das der ReportViewer heutzutage besser geworden ist, bin noch wie gesagt mit VS2005 und .NET 2.0 unterwegs.
Ist aber nun alles gut und ich hoffe ich muss nie wieder mit dem RV arbeiten :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!