В ASP.NET, как я могу принудительно установить формат даты в DropDownList в «ДД / ММ / ГГГГ»? - PullRequest
6 голосов
/ 31 октября 2009

Я должен создать DropDownList с датами последних 7 дней. Я хотел бы, чтобы DropDownList отображал дату как «ДД / ММ / ГГГГ». Итак, я создал список дат:

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();

Я добавляю свои даты как DateTime, а не как строки. Я думаю, что это метод ToString () моего объекта DateTime, который вызывается для создания текста, который виден в моем DropDownList. По умолчанию это дата и время. Результат:

[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]: ​​{07.12.2008 11:08:27}

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

[6]: {07.10.2008 11:08:27}

Как я могу принудительно настроить формат на "ДД / ММ / ГГГГ"?

Ответы [ 7 ]

23 голосов
/ 31 октября 2009

Все, что вам нужно сделать, это установить DropDownList.DataTextFormatString - тогда при привязке данных ваш элемент управления будет применять правильный формат:

<asp:DropDownList
    id="yourList"
    runat="server"
    dataTextFormatString="{0:dd/MM/yyyy}"/>
4 голосов
/ 31 октября 2009

Вместо форматирования источника данных вы также можете установить формат даты как:

DropDownList.DataTextFormatString = "{0:dd/MM/yyyy}";
2 голосов
/ 31 октября 2009

Формат Даты в списке таким образом, прежде чем привязывать данные к элементу управления.

1 голос
/ 31 октября 2009
   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();
1 голос
/ 31 октября 2009

Я бы обернул DateTime в другой объект и переопределил бы ToString (), так как это то, что отображает выпадающий список.

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

Основным преимуществом этого является то, что вы можете хранить другую информацию, кроме простой строки, для ссылки на другие объекты или данные. Если достаточно только простой строки, это излишне.

Если для вас важно иметь символ '/' во всех локалях (языках), вы должны поставить его в кавычки, в противном случае в некоторых местах может оказаться другой символ.

См. http://www.color -of-code.de / index.php? Option = com_content & view = article & id = 58: c-format-strings & catid = 38: программирование & Itemid = 66 для некоторых примеров (мой список читов с гочами наткнулся)

Код должен быть немного изменен:

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();
0 голосов
/ 31 октября 2009

Если это то, что вам нужно сделать во всем приложении, вам нужно посмотреть на объект CultureInfo.

Вы получаете текущий объект CultureInfo, вызывая

var culture = CultureInfo.CurrentCulture;

У объекта CultureInfo есть свойство с именем DateTimeFormat, которое, в свою очередь, имеет свойство с именем ShortDatePattern, которое вы должны установить следующим образом ...

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

Теперь вы можете использовать это где угодно, отформатировав строку следующим образом ...

String.Format("{d}", someDateTime);
0 голосов
/ 31 октября 2009

Просто добавьте элементы вручную в коллекцию DropDownList.Items вместо того, чтобы полагаться на 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)))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...