документация повышения для связывает , предполагает, что можно использовать повышение:: касательно и повышение:: cref для этого.
Я бы заключил 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:programming&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();
Все, что вам нужно сделать, это установить DropDownList.DataTextFormatString
- тогда после DataBinding ваш элемент управления применит правильный формат:
<asp:DropDownList
id="yourList"
runat="server"
dataTextFormatString="{0:dd/MM/yyyy}"/>
Вместо форматирования источника данных вы также можете установить формат даты как:
DropDownList.DataTextFormatString = "{0:dd/MM/yyyy}";
Отформатируйте даты в списке таким образом, прежде чем связывать данные для управления.
Если вы хотите использовать синтаксический анализатор (в данном случае lepl), но по-прежнему хотите получать промежуточные результаты, а не окончательный проанализированный список, то я думаю, что это именно то, что вы искали :
>>> nested = Delayed()
>>> nested += "{" + (nested[1:,...]|Any()) + "}"
>>> split = (Drop("{") & (nested[:,...]|Any()) & Drop("}"))[:].parse
>>> split("{{a}{b}{{{c}}}}")
['{a}{b}{{{c}}}']
>>> split("{a}{b}{{{c}}}")
['a', 'b', '{{c}}']
>>> split("{{c}}")
['{c}']
>>> split("{c}")
['c']
Сначала это может показаться непрозрачным, но на самом деле это довольно просто: o)
nested - это рекурсивное определение сопоставления для вложенных скобок ("+" и [...] в определении сохраните все как одну строку после того, как она будет сопоставлена). Затем split говорит, что соответствует как можно большему количеству ("[:]") чего-то, что окружено "{" ... "}" (которое мы отбрасываем с помощью "Drop") и содержит либо вложенный выражение или любую букву.
И, наконец, вот lepl-версия слова «все в одном»
Просто добавьте элементы в Коллекция 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)))
}
Если это что-то, что вам нужно сделать во всем приложении, вам нужно посмотреть на объект CultureInfo.
Вы можете получить текущий объект CultureInfo, вызвав
var culture = CultureInfo.CurrentCulture;
Объект CultureInfo
имеет свойство под названием DateTimeFormat
, которое, в свою очередь, имеет свойство под названием ShortDatePattern
, которое вы должны установить так ...
culture.DateTimeFormatInfo.ShortDatePattern = "dd/MM/yyyy";
Теперь вы можете использовать это где угодно, форматируя строка выглядит так ...
String.Format("{d}", someDateTime);