2009-10-31 23 views
6

Tengo que crear una DropDownList con las fechas de los últimos 7 días. Me gustaría que DropDownList muestre la fecha como "DD/MM/YYYY". Así que creé una lista de fechas:En ASP.NET, ¿cómo puedo forzar el formato de fechas en una DropDownList a "DD/MM/YYYY"?

DateTime date = DateTime.Now; 
List<DateTime> dates = new List<DateTime>(); 

for (int i = 0; i < HISTORY_LENGTH; i++) 
{ 
    dates.Add(date.AddDays(-i)); 
} 

DropDownList.DataSource = dates; 
DropDownList.DataBind(); 

Agrego mis fechas como DateTime, no como cadenas. Creo que es el método ToString() de mi objeto DateTime que se llama para crear texto que está visible en mi DropDownList. Por defecto es la fecha y la hora. El resultado es:

[0]: {16/07/2008 11:08:27}

[1]: {15/07/2008 11:08:27}

[2]: {14/07/2008 11:08:27}

[3]: {13/07/2008 11:08:27}

[4]: ​​{12/07/2008 11:08:27}

[5]: {11/07/2008 11:08:27}

[6]: {10/07/2008 11:08:27}

¿Cómo puedo forzar el formato de "DD/MM/AAAA"?

+0

¿Es esta una pregunta de asp.net? La pregunta original no especificó. –

+0

sry. Sí, en asp.net –

+0

Creo que debes considerar la respuesta @Andrew Hare como aceptada ... – Lijo

Respuesta

1

Me gustaría envolver el DateTime en otro objeto y anular ToString() ya que es lo que muestra la lista desplegable.

class MyDateTime { 
    public MyDateTime(DateTime dt) { 
     _dt = dt; 
    } 
    public override String ToString() { 
     return _dt.ToString("dd/MM/yyyy"); 
    } 
    private DateTime _dt; 
} 

La principal ventaja de hacerlo es que puede almacenar otra información que no sea una cadena para hacer referencia a otros objetos o datos. Si solo una cadena simple es suficiente, es excesiva.

Si tener un '/' es importante para ti en todos los entornos (idiomas), entonces tienes que ponerle la fecha arriba, de lo contrario podrías terminar con otro personaje en algunas ubicaciones.

Vea http://www.color-of-code.de/index.php?option=com_content&view=article&id=58:c-format-strings&catid=38:programming&Itemid=66 para ver algunos ejemplos (mi lista de trampas con errores con los que me encontré).

El código tiene que ser modificado un poco:

DateTime date = DateTime.Now; 
List<MyDateTime> dates = new List<MyDateTime>(); 

for (int i = 0; i < HISTORY_LENGTH; i++) 
{ 
    dates.Add(new MyDateTime(date.AddDays(-i))); 
} 

DropDownList.DataSource = dates; 
DropDownList.DataBind(); 
+1

Sry eso es muy alto para hacer por algo tan simple ... – Kovu

+0

Un poco alto tal vez, pero una vez que quiere asociar otras cosas con el fechas, podría ser útil. – jdehaan

+0

alto? jaja, yo lo llamaría pensar hacia adelante para la reutilización. –

2

Format las fechas en la lista de esa manera antes de enlazar los datos al control.

1
List<string> dates = new List<string>(HISTORY_LENGTH - 1); 

    for (int i = 0; i < HISTORY_LENGTH; i++) 
    { 
     dates.Add(DateTime.Today.ToString("dd/MM/yyyy")); 
    } 

    DropDownList.DataSource = dates; 
    DropDownList.DataBind(); 
0

Sólo tiene que añadir manualmente los elementos a la colección DropDownList.Items lugar de depender de DataBind():

DateTime date = DateTime.Now; 

for (int i = 0; i < HISTORY_LENGTH; i++) 
{ 
    DropDownList.Items.Add(new ListItem(date.AddDays(-i).ToString("dd/MM/yyyy"), date.AddDays(-i))) 
} 
23

Todo lo que necesita hacer es configurar DropDownList.DataTextFormatString - a continuación, en el enlace de datos de su control se aplicará el formato correcto:

<asp:DropDownList 
    id="yourList" 
    runat="server" 
    dataTextFormatString="{0:dd/MM/yyyy}"/> 
4

En lugar de dar formato a la fuente de datos también se puede establecer el formato de la fecha:

DropDownList.DataTextFormatString = "{0:dd/MM/yyyy}"; 
0

Si esto es algo que tiene que hacer en toda la aplicación, debe mirar el objeto CultureInfo.

Usted recibe la corriente objeto CultureInfo llamando

var culture = CultureInfo.CurrentCulture; 

El objeto CultureInfo ha llamado una propiedad DateTimeFormat que a su vez tiene una propiedad llamada ShortDatePattern que se debe establecer como tal ...

culture.DateTimeFormatInfo.ShortDatePattern = "dd/MM/yyyy"; 

Ahora puede usar eso en cualquier lugar formateando la cadena como ...

String.Format("{d}", someDateTime); 
+0

Esto no funciona, ya que recibe una excepción que dice que la instancia es de solo lectura. Consulte http://stackoverflow.com/questions/7413077/how-to-change-the-data-format-for-the-current-culture-so-that-it-applies-to-the or http: // stackoverflow .com/questions/10332064/currentculture-datetimeformat-longtimepattern-read-only que muestra que necesita clonar o construir un nuevo objeto cultural. –

Cuestiones relacionadas