Получение значения как DateTime, но отображение как DateTime.Year в DropDownList (с LINQ) - PullRequest
2 голосов
/ 29 июня 2011

В базе данных у меня есть таблица «Years», которая содержит столбцы для «YearId», «YearStart» и «YearEnd» (не спрашивайте меня почему, это не моя база данных).

Мне нужно заполнить asp: DropDownList с различными значениями года в таблице, т.е.Мне нужно, чтобы раскрывающийся список был похож на:

//pseudocode
<select>
    <option>2010</option>
    <option>2011</option>
    ..etc..
</select>

Но так как 'YearStart' и 'YearEnd' хранятся в формате DateTime, я получаю это:

//pseudocode
<select>
    <option>1/1/2010 12:00:00 AM</option>
    <option>1/1/2011 12:00:00 AM</option>
    ..etc..
</select>

Воткак я в настоящее время заполняю DropDownList:

dropDownList.DataSource = DataContext.Years;
dropDownList.DataValueField = "YearId";
dropDownList.DataTextField = "YearStart";
dropDownList.DataBind();

В основном мне нужно, чтобы dropDownList.DataTextField был в форме DateTime.Year, то есть:

//pseudocode
dropDownList.DataTextField = ("YearStart").Year;

Так что было бы лучшеспособ заполнить dropDownList и достичь того, что мне нужно?

Ответы [ 4 ]

4 голосов
/ 29 июня 2011

Вы можете попробовать включить DataTextFormatString

dropDownList.DataTextFormatString = "{0:YYYY}";

или

вы можете настроить источник данных следующим образом

dropDownList.DataSource = DataContext.Years.Select(y => new {y.YearID, YearStart = y.YearStart.Year})
                                    .ToList();
3 голосов
/ 29 июня 2011

Если вы не хотите менять сам источник данных, я подозреваю, что вы используете:

dropDownList.DataTextField = "YearStart.Year";

В основном вы указываете обязательный путь , а не просто одно имя свойства.

1 голос
/ 29 июня 2011

Попробуйте изменить код привязки данных на: (using System.Linq конечно)

dropDownList.DataSource = DataContext.Years.Select(d => d.Year);
dropDownList.DataBind();
0 голосов
/ 29 июня 2011

Вы можете получить все LINQy, но я бы просто сделал: dropDownList.DataTextFormatString = {0: yyyy};

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.datatextformatstring.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...