2010-02-17 10 views
6

Estoy usando una expresión DataBinder.Eval en una cuadrícula de datos ASP.NET, pero creo que esta pregunta se aplica al formato de cadena en .NET en general. El cliente ha solicitado que si el valor de una cadena es 0, no debería mostrarse. Tengo el siguiente truco para lograr esto:Usando el formato de cadena .NET, ¿cómo formateo una cadena para mostrar en blanco (cadena vacía) para cero (0)?

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

me gustaría cambiar el {0:N0} expresión de formato para que pueda eliminar la instrucción IIF, pero no puedo encontrar nada que funcione.

+0

Gracias por la corrección de formato, Nick. Ahora veo cómo hacer eso. –

Respuesta

10

Es necesario utilizar el section separator, así:

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

Tenga en cuenta que sólo la parte negativa puede estar vacía, así que tengo que poner un espacio en la sección 0. (Lea el documentation)

+2

Es un buen día. ¡Aprendí algo y todavía no son las 10 a.m.! Desearía poder votar dos veces. –

+0

Casi a la derecha, pero N0 es un formato estándar y necesita un formato personalizado, p. "{0: #, ## 0 ;;}". No necesita poner un espacio en la tercera sección. – Joe

+1

Atención, esto no funcionará como usted cree: para MSDWhole! = 0, obtendría "N ". N0 no es compatible con separadores de grupo. Use "{0: #, 0 ;;}" – Ruben

0

Utilice un método personalizado.

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

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

intenta llamar a una función mientras que la unión como esta

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

y dentro de la función que el formato que desea

3

Dada la respuesta aceptada:

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

La una el espacio se coloca en la tercera posición, sin embargo colocando un # en la tercera posición on eliminará la necesidad de llamar al Trim().

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

Dave, ¡probé esta idea y funcionó muy bien! Dejar caer el recorte definitivamente es una mejora. ¡Gracias! –

Cuestiones relacionadas