Autor Beitrag
lapadula
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Mo 29.05.17 14:27 
Hallo, habe da ein etwas merkwürdigen Fehler in meinem Report.

Dies ist mein Ausdruck:

ausblenden 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?
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 29.05.17 14:53 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: lapadula
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: 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: msdn.microsoft.com/d...VisualBasicFunctions

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Mo 29.05.17 16:48 
Ok hab es soweit geschafft, hier meine Lösung:

Report anklicken -> Bericht -> Berichtseigenschaften -> Code ->

ausblenden 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 ->
ausblenden 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 user profile iconTh69: C#- durch Code-Tags ersetzt
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 29.05.17 17:59 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: lapadula
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: 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