2010-02-17 11 views
6

J'utilise une expression DataBinder.Eval dans une Datagrid ASP.NET, mais je pense que cette question s'applique à la mise en forme de chaînes dans .NET en général. Le client a demandé que si la valeur d'une chaîne est 0, elle ne devrait pas être affichée. J'ai le hack pour accomplir ceci:En utilisant la mise en forme de chaîne .NET, comment formater une chaîne pour qu'elle soit vide (chaîne vide) pour zéro (0)?

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

Je voudrais changer l'expression {0:N0} mise en forme afin que je puisse éliminer la déclaration IIf, mais ne peut pas trouver quelque chose qui fonctionne.

+0

Merci pour le correctif de formatage, Nick. Je vois maintenant comment faire ça. –

Répondre

10

Vous devez utiliser le section separator, comme ceci:

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

Notez que seule la section négative peut être vide, donc je dois mettre un espace dans la section 0. (Lire le documentation)

+2

C'est une bonne journée. J'ai appris quelque chose et il n'est même pas encore 10 heures du matin! Je souhaite que je pourrais upvote deux fois. –

+0

Presque à droite, mais N0 est un format standard et vous avez besoin d'un format personnalisé, par ex. "{0: #, ## 0 ;;}". Vous n'avez pas besoin de mettre un espace dans la troisième section. – Joe

+1

Attention, cela ne fonctionnera pas comme vous le pensez: pour MSDWhole! = 0, vous obtiendrez "N ". N0 n'est pas pris en charge avec les séparateurs de groupe. Utilisez "{0: #, 0 ;;" – Ruben

0

Utilisez une méthode personnalisée.

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

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

Essayez d'appeler une fonction tout en se liant comme celui-ci

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

et à l'intérieur de la fonction faire la mise en forme que vous voulez

3

Compte tenu de la réponse acceptée:

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

L'un l'espace est placé dans la 3ème position, mais placer un # dans le troisième positi sur éliminera le besoin d'appeler Trim().

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

Dave, j'ai essayé cette idée et ça a bien fonctionné! Laisser tomber l'assiette est définitivement une amélioration. Merci! –