2013-12-05 2 views
3

я связан выпадающий список с перечислением дней недели, как это:Как сопоставить dropDownlist с перечислением в C#?

private void BindDayOfWeek() 
    { 
     this.ddlDayOfWeek.DataSource = GetWeekDays(); 
     this.ddlDayOfWeek.DataBind(); 
    } 

    private List<DayOfWeek> GetWeekDays() 
    { 
     return Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>().ToList(); 
    } 

Теперь я хочу, чтобы прочитать ИНТ значение выбранного дня недели (из списка), который был в перечислении DayOfWeek т.е. если я выберет «воскресенье» из раскрывающегося списка, я смогу выбрать значение «воскресенье» в enum DaysOfWeek (NOT ddlDayOfWeek.selectedValue ИЛИ SelectedIndex)

Как я могу это сделать без переключателя и if (что Я думаю, может быть один способ)?

ответ

7

Поскольку SelectedValue - это строка, вам необходимо сначала ее разобрать int. Тогда вам просто необходимо, чтобы привести его к DayOfWeek:

if(ddlDayOfWeek.SelectedIndex >= 0) 
{ 
    int selectedDay = int.Parse(ddlDayOfWeek.SelectedValue); 
    DayOfWeek day = (DayOfWeek) selectedDay; 
} 

Если вы не отделить DataTextField и DataValueField (то, что вы должны), вы можете разобрать string «воскресенье», который отображается в DropDownList к DayOfWeek через Enum.Parse :

DayOfWeek selectedDay = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), ddlDayOfWeek.SelectedValue); 

Edit: Вот подход, как вы можете установить DataTextField/DataValueField из перечисления:

var weekDays = Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>() 
    .Select(dow => new { Value = (int)dow, Text = dow.ToString() }) 
    .ToList(); 
ddlDayOfWeek.DataSource = weekDays; 
ddlDayOfWeek.DataTextField = "Text"; 
ddlDayOfWeek.DataValueField = "Value"; 
ddlDayOfWeek.DataBind(); 
+0

Я вижу пункт. Хотя ddlDayOfWeek по-прежнему имеет названия недель в DatavalueField, поэтому DayOfWeek selectedDay будет «Sunday» (из вашего второго набора кода). Как я могу получить значение «воскресенье» от Enum? – sdeep

+0

@sdeep: с вашим текущим подходом работает мой второй подход. Если вы хотите использовать 'int' как' Value' и day-name как «Text», вы можете использовать запрос, который я редактировал в свой ответ. –

+0

Отлично !!!! Спасибо за тонну за помощь – sdeep

0
private void BindDayOfWeek() 
{ 
    this.ddlDayOfWeek.DataSource = GetWeekDays(); 
    this.ddlDayOfWeek.DataTextField = DayOfWeek; 
    this.ddlDayOfWeek.DataValueField = (int)DayOfWeek.ToString(); 
    this.ddlDayOfWeek.DataBind(); 
} 

Изменить код привязки к вышесказанному. Таким образом, выбранный элемент выпадающего списка, как и все элементы, будет иметь текстовое значение, которое будет отображаться пользователю, и значение для этого значения, которое вы можете получить на стороне сервера. Значение свойства элемента даст вам номер выбранного дня.

+0

??? Вы протестировали его? Я не думаю, что он может работать –

+0

@Stefano, нет, я его не тестировал. Зачем? Вы видите какую-либо ошибку? Единственное, что я не абсолютен, это имена свойств. DataTextField и DataValueField – Christos

+0

@Christos DayOfWeek не имеет методов tostring(). – sdeep

Смежные вопросы