2013-05-29 5 views
1

Я пытаюсь создать раскрывающийся список, который я уже создал на странице редактирования начала формы, на значение, ранее выбранное из базы данных sql для текущего пользователя.Выбор начального значения выпадающего списка

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

protected void ddlSelect_Init(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ReinstatementCS"].ConnectionString); 
    SqlCommand myCommand = new SqlCommand("SELECT Prefix, Number, ClassSection, Location, StartTime, EndTime, ClassDay, Prefix + Number + ', Section: ' + CAST(ClassSection AS VarChar) + ', Location: ' + Location + ', Start Time: ' + StartTime + ', End Time: ' + EndTime + ', Days: ' + ClassDay + ', Credits: ' + CAST(ClassCredit AS VarChar) AS PN, Capacity, GPAReqAbove1, GPAReqBelow1, CreditReqAbove30, CreditReqBelow30, ClassCredit, IsTransfer, SLN FROM Classes"); 
    myCommand.Connection = con; 
    SqlDataAdapter da = new SqlDataAdapter(myCommand); 
    DataTable dt = new DataTable(); 
    da.Fill(dt); 

    DropDownList ddlSelect = FVStudentClass.FindControl("ddlSelect") as DropDownList; 
    ddlSelect.DataSource = dt; 
    ddlSelect.DataTextField = "PN"; 
    ddlSelect.DataValueField = "SLN"; 
    ddlSelect.DataBind(); 

    con.Close(); 
} 

Где СЛНЫ это уникальное значение для каждого элемента DropDownList и PN является справочной информацией для каждого элемента DropDownList , Я хочу, чтобы элемент был выделен как PN, который соответствует тому, что этот конкретный пользователь уже сохранил в базе данных. Проблема заключается в том, что, когда я пытаюсь быть, что выбранное значение я использую:

protected void FVStudentClass_ModeChanging(object sender, FormViewCommandEventArgs e) 
    { 
     if (FVStudentClass.CurrentMode != FormViewMode.Edit) 
      return; 
     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ReinstatementCS"].ConnectionString); 
     SqlCommand myCommand = new SqlCommand("SELECT Prefix + Number + ', Section: ' + CAST(ClassSection AS VarChar) + ', Location: ' + Location + ', Start Time: ' + StartTime + ', End Time: ' + EndTime + ', Days: ' + ClassDay + ', Credits: ' + CAST(ClassCredit AS VarChar) AS PN, SLN FROM Classes JOIN StudentClass on SLN = SCClass WHERE SCWSUID = " + Request.QueryString["ALWSUID"]); 
     myCommand.Connection = con; 
     SqlDataAdapter da = new SqlDataAdapter(myCommand); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 
     DropDownList ddlSelect = new DropDownList(); 
     ddlSelect = FVStudentClass.FindControl("ddlSelect") as DropDownList; 
     if (ddlSelect != null) 
     { 
      ddlSelect.DataSource = dt; 
      ddlSelect.Items.FindByText(dt.Rows[0]["PN"].ToString()).Selected = true; 
     } 
     con.Close(); 
    } 

, но я все еще застряли, потому что DropDownList не начинается с выбран сохраненное значение. Вы знаете, как это исправить? Я использую неправильную команду (Должен ли я использовать что-то помимо ModeChanging)? Спасибо!

+0

Можете ли вы отладить код? Что такое 'ddlSeelct.SelectedValue' после того, как вы выберете ранее сохраненное значение? –

+0

Итак, я просто отладил его, и похоже, что он выбирает нужный индекс из раскрывающегося списка, но он не запускает FVStudentClass_ModeChanging до слишком позднего времени. Он запускает код, когда я нажимаю кнопку обновления в режиме редактирования, а не запускаю его, когда сначала появляется режим редактирования. Любая идея, как это исправить? – Austin

ответ

2

Попробуйте ввести логику, чтобы выбрать элемент DropDownList на событии FormView DataBound, событие ModeChanging происходит до того, как режим фактически изменится.

+0

Отлично! Это исправило это! – Austin

0

Вы должны просто установить ddlSelect.SelectedValue на значение, которое вы хотите выбрать.

ddlSelect.SelectedValue = dt.Rows[0]["PN"].ToString(); 
Смежные вопросы