2010-02-17 8 views
6

Ich verwende einen DataBinder.Eval -Ausdruck in einem ASP.NET-Datagrid, aber ich denke, dass diese Frage für String-Formatierung in .NET im Allgemeinen gilt. Der Kunde hat angefordert, dass, wenn der Wert einer Zeichenfolge 0 ist, sollte es nicht angezeigt werden. Ich habe den folgenden Hack um dies zu erreichen:Wie formatiere ich eine Zeichenfolge mithilfe von .NET-Zeichenfolgenformatierung, um leere (leere Zeichenfolge) für Null (0) anzuzeigen?

<%# IIf(DataBinder.Eval(Container.DataItem, "MSDWhole").Trim = "0", "", 
    DataBinder.Eval(Container.DataItem, "MSDWhole", "{0:N0}")) %> 

Ich mag würde den {0:N0} Formatierung Ausdruck ändern, so dass ich die Anweisung von IIF beseitigen kann, kann aber nichts finden, das funktioniert.

+0

Danke für die Formatierung beheben, Nick. Ich sehe jetzt, wie man das macht. –

Antwort

10

Sie benötigen die section separator, wie diese verwenden:

<%# DataBinder.Eval(Container.DataItem, "MSDWhole", "{0:N0;; }").Trim() %> 

Beachten Sie, dass nur der negativer Abschnitt leer sein, so brauche ich einen Platz im 0 Abschnitt zu setzen. (Lesen Sie die documentation)

+2

Es ist ein guter Tag. Ich habe etwas gelernt und es ist noch nicht einmal 10 Uhr morgens! Ich wünschte, ich könnte zweimal upvotieren. –

+0

Fast richtig, aber N0 ist ein Standardformat und Sie benötigen ein benutzerdefiniertes Format, z. "{0: #, ## 0 ;;}". Sie müssen kein Leerzeichen in den dritten Abschnitt einfügen. – Joe

+1

Vorsicht, dies funktioniert nicht so, wie Sie es sich vorstellen würden: Für MSDWhole! = 0 würden Sie "N " erhalten. N0 wird nicht mit Gruppenseparatoren unterstützt. Benutze "{0: #, 0 ;;}" – Ruben

0

Verwenden Sie eine benutzerdefinierte Methode.

public static string MyFormat(double value) {  
    return value == 0 ? "" : value.ToString("0"); 
} 

<%# MyFormat(Convert.ToDouble(Eval("MSDWhole"))) %> 
0

Versuch, eine Funktion aufzurufen, während ähnliche Bindung

<%# MyFunction(DataBinder.Eval(Container.DataItem, "MSDWhole")) %> 

und innerhalb der Funktion die Formatierung machen Sie

3

die akzeptierte Antwort:

<%# DataBinder.Eval(Container.DataItem, "MSDWhole", "{0:N0;; }").Trim() %> 

Die a Platz wird in der 3. Position platziert, jedoch platziert ein # in der dritten Position auf wird die Notwendigkeit beseitigen, Trim() zu rufen.

<%# DataBinder.Eval(Container.DataItem, "MSDWhole", "{0:N0;;#}") %> 
+0

Dave, ich habe diese Idee ausprobiert und es hat super geklappt! Fallenlassen der Trimmung ist definitiv eine Verbesserung. Vielen Dank! –