dando formato a las columnas en un GridView (fechas, moneda, etc)

Holas!

Aunque ya José Manual Alarcón, habló de esto en un post, quiero dar mi aporte y comentarios sobre esto.

No sólo es con las fechas, es con cualquier formato que quieras aplicar a una columna. Como sabemos para aplicar formato a un columna se hace lo siguiente:

   <columns>
      <asp:BoundField DataField=“CreationDate”
                  DataFormatString=“{0:M-dd-yyyy}” HeaderText=“CreationDate” />
   </columns>

Se usa la propiedad DataFormatString para aplicar un formato, pero porque no se aplica el formato?, revisando DataFormatString en MSDN, encontramos el porqué, y lo que pasa es que cuando la propiedad HtmlEncode esta en true el valor de campo es codificado, es decir, el valor HTML de codifica a string. Y esto es así imaginen que tenemos nuestra etiqueta "<p>", es un HTML, pero si usamos el método Server.HTMLEncode, lo que estamos haciendo es codificar el HTML a un string, y el valor devuelto sería "&lt;p&gt;".

Eso mismo pasa cuando el la propiedad HtmlEncode de BoundField, esta en True, el valor del campo se convierte a string antes de que se aplique el formato. Y es por eso que es necesario colocar HtmlEncode=False, para evitar la codificación y poder aplicar el formato :D.

Espero haberme dejado entender... y si no.. sólo entiendan que con HtmlEncode=False, funciona el formato de DataFormatString.

Ahora ahondemos un poco más en DataFormatString, las siguientes letras son para formatos numéricos:

C -> Muestra los valores numéricos en formato de moneda.

D -> Muestra los valores numéricos en formato decimal.

E -> Muestra los valores numéricos en formato científico (exponencial).

F -> Muestra los valores numéricos en formato fijo.

G -> Muestra los valores numéricos en formato general.

N -> Muestra los valores numéricos en formato numérico.

X -> Muestra los valores numéricos en formato hexadecimal.

Así por ejemplo si queremos mostrar un promedio de notas con dos decimales, podemos poner lo siguiente:

   DataFormatString="{0:F2}"

Con el cual tendríamos un resultado como este:

Ahora que si queremos usar dar formato una fecha tiene que ser de la siguiente forma:

   DataFormatString=“{0:M-dd-yyyy}”

Para ver los diversos formatos disponibles podemos visitar el siguiente link.

Nota: En el caso de la fecha y la moneda, están también estarán determinadas por la configuración regional de nuestro sistema.

Algunos otros links útiles:

Saludos,


Post cruzado
Published 13/1/2007 23:48 por Sergio Tarrillo
Archivado en:
Comparte este post:
http://geeks.ms/blogs/sergiotarrillo/archive/2007/01/13/8657.aspx

Comentarios

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Hola Sergio,

Que prácticas son estas explicaciones ya que dar formato a columnas es una problemática diaria para cualquier desarrollador profesional. Si me dieran un euro por cada una que he formateado...

Lo que no entiendo es el porque del comportamiento por defecto del GridView con la propiedad HTMLEncode en true.

En la documentación pone que:"La codificación de los valores de campo en HTML ayuda a evitar que se muestren los ataques realizados mediante secuencias de comandos entre sitios y contenidos malintencionados. Esta propiedad debe estar habilitada siempre que sea posible."

Las preguntas que se vienen a la cabeza son las mismas que se le pasarían a cualquiera.¿Estamos haciendo menos seguras nuestras aplicaciones Web? ¿Si es cierto, a que tipos de ataques estamos expuestos?

Saludos.

Sunday, January 14, 2007 8:26 PM por Emilio Velardiez Moreno

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Voy a preparar un post sobre esto, pero puedes ir echandole un ojo a esto: http://www.asp.net/faq/requestvalidation.aspx.

Saludos,

Monday, January 15, 2007 10:02 PM por Sergio Tarrillo

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Tengo una pregunta a ver si me la pueden resolver, es algo tonta pero no la se debido aque llevo unas semanas usando .net la pregunta es:

¿Con que propiedad del gridview puedo saber si arrojo resultados su respectivo sqldatasource?

Ojala puedan ayudarme mi correo es pakorn_ags@hotmail.com

Friday, March 2, 2007 10:58 PM por PaKoRn

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Holas PakoRn!

De por sí, si el SqDataSource no tiene datos el GridView no se mostrará, pero también puedes usar la propiedad Rows.Count (http://msdn2.microsoft.com/es-es/library/system.web.ui.webcontrols.gridview.rows(VS.80).aspx), para determinar si es mayor a 0.

Saludos,

Saturday, March 24, 2007 6:55 PM por Sergio Tarrillo

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Ya me estaba volviendo loco !!!

GRacias!!!! por el post, hay cada mañita....

salu2

Sergio T

Tuesday, April 17, 2007 5:17 PM por SergioT

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

así es cada mañita, pero descubribles al fin y al cabo :).

Saludos,

Saturday, April 28, 2007 5:46 PM por Sergio Tarrillo

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

no es x nada pero gracias, yo tambien me staba volviendo locooo

salu2

Thursday, May 10, 2007 2:13 AM por daniel lt

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

de nada daniel lt :), y a veces er un poco loco no es malo xD!

Saludos,

Monday, July 2, 2007 3:43 PM por Sergio Tarrillo

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

hola me ha servido demasiado todo esto de dar formato a los datos en mi datagrid.

la pregunta es porque no funciona mi condicion

protected sub migrid_rowdatabound(....

if e.row.cells(1).text="1" then

e.row.cells(1).text="SI"

else

e.row.cells(1).text="NO"

end if

end sub

cuando agrego la propiedad de AllowPaging=true

debo de paginar mi grid ya que son demasiados registros pero quiero tambien modificar el valor de algunas columnas que traen otros datos

Thursday, August 30, 2007 12:58 AM por Rafael

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Muy buena referencia, saludos

Espero y les sirva esto, para cuando creen un

dataTable, y no sea tomado de una Base de Datos, ponerle el tipo de columna(getType)...

Para la columna PERCEPCIONES.

htmlencode = false

datafield = "PERCEPCIONES"

DataFormatString="{0:c2}" formato de moneda  

llenado de columnas...

dt.Columns.Add("CONCEPTO", GetType(String))

dt.Columns.Add("PERCEPCIONES", GetType(Double))

dt.Columns.Add("DEDUCCIONES", GetType(Double))

dt.Columns.Add("ACUMULADOS", GetType(Double))

llenado de renglones...

dt.Rows.Add(New Object() {"smensual", 500.00, Nothing, Nothing})

Me tope con este detalle espero sea de utilidad...

Wednesday, September 26, 2007 6:47 PM por Armando...

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

very good, and so clear. thanks

Thursday, February 21, 2008 7:25 PM por angel hernandez

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Rafael, has intentado depurar para ver los valores?, en cuanto a la paginación que problema te da?.

Armando gracias por las aclaraciones.

Angel, de nada :).

Saludos,

Monday, March 3, 2008 4:31 PM por Sergio Tarrillo

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Gracias, por el consejo... me saco de un problema que tenia hace dias!

Thursday, April 24, 2008 6:07 PM por Israel

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

genial, agradecido

Friday, June 27, 2008 4:22 PM por eduardo segura

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

con el DataFormatString puedo darle fomato a cualquier tipo de dato

Wednesday, August 27, 2008 11:52 PM por esteban

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

hola .. sobre ese mismo ejemplo

en la foto... quisiera saber como puedo cambiar de orden la columna editar al ultimo

despues de promedio...

Wednesday, September 3, 2008 5:42 AM por alejandro

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Hola, tengo una pregunta por si me pueden ayudar.

Me manda el mensaje: <b>Error converting data type nvarchar to datetime.</b>

Esto cuando uso el formateo de una columna tipo fecha con:

                   <EditItemTemplate>  

                       <asp:TextBox ID="txtEditFechaIngreso" runat="server" Text='<%# Bind("FechaIngreso", "{0:d}") %>' MaxLength="10" CssClass="NormalTextBox" />

                   </EditItemTemplate>  

al tratar de insertarla en la B.D. de sqlserver, con un stored procedure, que espera el dato tipo fecha.

El dato es 17/12/1910

Me imagino que es porque la b.d. lo almacena como mm/dd/yyyy. Alguna idea de como convertirlo? Ya que cuando el dia entra en un rango valido de 1-12 no hay problema.

Gracias

Wednesday, October 29, 2008 9:30 PM por Luis

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

EXCELENTE y muy práctica explicación! Antes de rendirse y usar un TemplateField para dar formato con un Label fué excelente descubrir por que no funciona el DataFormatString.

Excelente!

Saludos

Sunday, November 30, 2008 6:00 PM por Javier Castillo

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Bien Sergio!! tambien tenia este problema, y me tope con tu pagina, he visto que en VS2008 aparece una nueva propiedad: HTMLEncodeFormatString.

Y para obtener los resultados deseados: HTMLEncode = False

HTMLEncodeFormatString = true (aunque tambien podria estar en false).

gracias.

Tuesday, December 23, 2008 5:53 PM por Daniel Llanos Meza

# Websites tagged "fechas" on Postsaver

PingBack desde  Websites tagged "fechas" on Postsaver

Saturday, December 27, 2008 4:17 PM por Websites tagged "fechas" on Postsaver

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

hola ..  quisiera saber como puedo cambiar de orden la columna de tipo CommandField (seleccionar) para que aparezca al final de todas las columnas

Thursday, January 22, 2009 12:01 AM por Denise

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

te cuento que tengo valores que me da en la base de 3,1452 pero quiero llenar en el gridview el valor con 3,14 como puedo hacer eso

gracias

Wednesday, March 25, 2009 9:55 PM por ROBERTO

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

pongo asi como dicen pero se muestra la cadena de formato:

<asp:BoundField DataField="FECHA_REGISTRO" HeaderText="Fecha de Registro" ItemStyle-Width="100px" HtmlEncode="false" DataFormatString="dd/MM/yyyy HH:mm">

y el resultado es: dd/MM/yyyy HH:mm

que hago?? :(

Wednesday, August 12, 2009 12:14 AM por omat

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Cordial saludo a todos, muy buen aporte, aunque aún no logro darle formato moneda a los textbox que se encuentran en una columna de un gridview. La idea es que pueda utilizar los textbox como un excel, los cuales modifico sin utilizar la opción update del gridview, sino directamente en el txtbox y pues quiero que después de guardar, se convierta lo que digité en fortmato número, :S, porfavor necesito ayuda, graciasss

Wednesday, March 24, 2010 5:08 PM por Geovany

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

gracias por todos, e por mejor

Monday, April 19, 2010 8:04 PM por feeds

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Formato de fecha en gridview:

<asp:BoundField DataField="FechaNacimiento" HeaderText="Fecha Nacimiento"

                                   HtmlEncode="False" DataFormatString="{0:dd-MM-yyyy}">

                                   <ItemStyle Width="30%" HorizontalAlign="Center" />

                               </asp:BoundField>

Friday, November 26, 2010 9:28 PM por Oscar Romero

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

Te hago una pregunta, alguien sabe como hacer para agregar los botones o link a la derecha de en vez de la izquierda? ... gracias

Monday, May 2, 2011 8:44 PM por Fernando Belardinelli

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

hola tengo una conexion a una bd sql server y en la grilla quiero un formato de tipo hora que en la bd esta tipo double como convierto este campo en la grilla para usarlo como formato {0:hh:mm:ss},

ya que si lo uso normalmente me da error por que no es tipo fecha/hora

ejemplo este es el campo

<asp:BoundField DataField="Tiempo Conexion" HeaderText="Tiempo Conexion"

                   ReadOnly="True" SortExpression="Tiempo Conexion"

                   ConvertEmptyStringToNull="False" />

y quiero agregarle el DataFormatString="{0:hh:mm:ss]" pero da error por q es tipo double mas no date

Wednesday, June 8, 2011 3:34 PM por niklerk

# re: dando formato a las columnas en un GridView (fechas, moneda, etc)

 <asp:Label ID="pickdate" runat="server" Text='<%# Eval("PickupDate", "{0:M/d/yyyy}") %>' /> ---fecha

<asp:Label ID="lblgrdPrice" runat="server" Text='<%# Eval("USD","{0:c}") %>' ></asp:Label>  -- $1,200.00

<asp:Label ID="lblgrdPrice" runat="server" Text='<%# Eval("USD","{0:N2}") %>' ></asp:Label>  -- 1,200.00

<asp:Label ID="lblgrdPrice" runat="server" Text='<%# Eval("USD","{0:N0}") %>' ></asp:Label>  -- 1,200

Wednesday, June 29, 2011 10:24 PM por fernando yevenes