2009-05-26 14 views
1

Ich habe einen nullable boolean Eingangsparameter mit dem folgenden Ausdruck in meinem Textfeld angezeigt werden:Report Server - nicht mehr korrekt Eingabeparameter über IIF() oder Switch()

=iif(Parameters!Sorted.Value="","All",iif(Parameters!Sorted.Value="True","Sorted","Unsorted")) 

und ich versuche, dies basierend anzuzeigen auf dem Wert von Sortiert Eingangsparameter

Null = "All"

Wahr = "Sorted"

Falsch = „unsortiert“

Ich habe auch die folgende switch-Anweisung ohne Erfolg versucht:

=Switch(Parameters!Sorted.Value="","All",Parameters!Sorted.Value="True","Sorted",Parameters!Sorted.Value="False","Unsorted") 

Jedes Mal, wenn der Bericht macht ich die folgende Fehlermeldung:

The value expression for the textbox ‘textbox7’ contains an error: Input string was not in a correct format. 

ich verwende VS2003 und SSR Designer v 8.0

Edit # 1: Pro Anfrage

<ReportParameter Name="Sorted"> 
    <DataType>Boolean</DataType> 
    <Nullable>true</Nullable> 
    <Prompt>Sorted</Prompt> 
</ReportParameter> 

Ist dies der Code, den Sie angefordert haben?

Antwort

0

Okay, ich denke, Ihr Problem könnte sein, dass Ihr DataType Boolean ist und Sie einen leeren Wert angeben. Das kannst du nicht tun.

Stattdessen versuchen, das Schlüsselwort Nothing angeben:

=iif(Parameters!Sorted.Value=nothing,"All",iif(Parameters!Sorted.Value="True","Sorted","Unsorted")) 
+0

Dank Jon, nachdem sowohl die Bewertung ‚nichts‘ Einschalten der iif() & Switch() -Methode gab beide die gewünschten Ergebnisse zurück. Danke noch einmal! – Neomoon

0

Wenn es ein Boolean Typ Parameter ist es nicht semantisch korrekt ist es zu prüfen, als ob es sich um eine Zeichenfolge waren.

Sie können IsNothing(Parameters!Sorted.Value) verwenden, um nach einer Null und dann Parameters!Sorted.Value = True (ohne die Anführungszeichen) für den zweiten Fall zu überprüfen.

Ich gebe zu, dass ich Visual Studio nicht gestartet habe, um zu überprüfen, ob es normal ist, Boolesche Parameter so zu behandeln, als wären sie eine Zeichenkette, aber der Fehler, den Sie erhalten, klingt so. Dieser Fehler wird normalerweise von Parse Methoden ausgelöst, wie wenn Sie Int32.Parse("34.32") tun, oder so scheint ich mich zu erinnern. Ich nehme an, RS macht eine automatische Analyse, so dass die Datentypen übereinstimmen und der Gleichheitsoperator seine Magie machen kann.

0

Warum nicht die Logik so ändern, dass sie explizit auf "True" oder "False" getestet wird und dann durch "All" geht? Und ohne sich um String sich Gedanken, True vs „true“ etc

=iif(Parameters!Sorted.Value,"Sorted",iif(NOT(Parameters!Sorted.Value), "Unsorted","All")) 

(Kann nicht testen und zu hoffen, ist nicht richtig :-)