2014-01-29 6 views
0

У меня возникла странная проблема с обратной записью. У меня есть два выпадающих списка, проектные и зарядные коды. Выбор проектов включает в себя сброс кода зарядки. Я заметил, что когда я выбираю код зарядки, значение появляется в раскрывающемся списке на долю секунды, а затем меняется на первый вариант в раскрывающемся списке. Изменение индекса этих триггеров выпадающего списка и значение - это первый вариант в раскрывающемся списке, а не выбранный. Я не уверен, почему он это делает, но он должен иметь какое-то отношение к обратной передаче. Если это проблема обратной связи, есть ли способ сохранить выбор выпадающего списка и восстановить выбор после повторной загрузки? Пожалуйста, не предлагайте использовать панели AJAX или обновления, так как нам не разрешено. Вот мой жерех код:Каскадные выпадающие списки и состояние управления (нет AJAX, JQuery или обновленных панелей)

<p> 
    <asp:DropDownList ID="ddlProjects" runat="server" 
     onselectedindexchanged="ddlProjects_SelectedIndexChanged" 
     AutoPostBack="True" Visible="false" > 
    </asp:DropDownList> 
</p> 
    <asp:DropDownList ID="ddlChargeCodes" runat="server" AutoPostBack="true" 
     onselectedindexchanged="ddlChargeCodes_SelectedIndexChanged" Visible="false"> 
    </asp:DropDownList> 
    <p> 

и C# код позади:

 protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 

      if (!IsPostBack) 
      { 
       LoadProjectsDropDown(); 
      }  
     //Rest of Pageload Omitted.... 


     // Initial Population of Project Dropdown 
     protected void LoadProjectsDropDown() 
    { 
     try 
     { // Populate the Projects Drop Down from Table 
      ddlProjects.Items.Clear(); 
      ddlProjects.DataSource = Time_Tracker.BLL.ProjectsManager.GetItems(); 
      ddlProjects.DataTextField = "Project_Name"; 
      ddlProjects.DataValueField = "Project_ID"; 
      ddlProjects.DataBind(); 
      ddlProjects.Items.Insert(0, new ListItem("PLEASE SELECT A PROJECT", 
      "PLEASE SELECT A PROJECT")); 
     } 
     catch (Exception ex) 
     { 
      Utilities.ErrorLog(ex.Message, ex.GetType().ToString(), ex.StackTrace, 
     @"Time_Tracker.txt"); 
     } 
     } 



     // The Index Change portion of the Project Dropdown, which builds the Charge Code dropdown 
     protected void ddlProjects_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     try 
     { // When user selects the Project, Populate Charge Codes for the selected Project 
      ddlChargeCodes.Visible = true; 
      if (!string.IsNullOrEmpty(ddlProjects.SelectedValue)) 
      { 
       ddlChargeCodes.Items.Clear(); 
       ddlChargeCodes.DataSource = Time_Tracker.BLL.TasksManager.GetChargeCodes 
     (ddlProjects.SelectedValue); 
       ddlChargeCodes.DataTextField = "Description"; 
       ddlChargeCodes.DataValueField = "Project_ID"; 
       ddlChargeCodes.DataBind(); 
       ddlChargeCodes.Items.Insert(0, new ListItem("PLEASE SELECT A CHARGE 
     CODE", "PLEASE SELECT A CHARGE CODE")); 
       Utilities.Project = Convert.ToInt16(ddlProjects.SelectedValue); 
      } 
     } 
     catch (Exception ex) 
     { 
      Utilities.ErrorLog(ex.Message, ex.GetType().ToString(), ex.StackTrace, @"Time_Tracker.txt"); 
     } 
    } 


      // The Index Change of the Charge Codes Dropdown 
      protected void ddlChargeCodes_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     try 
     { // When user selects the Charge Code, it shows a summary and asks for the number of hours 
      Utilities.Description = Convert.ToString(ddlChargeCodes.SelectedItem); 
      Utilities.Chargecode = Convert.ToString(ddlChargeCodes.SelectedItem); 
      lblHoursLabel.Visible = true; 
      txtHours.Visible = true; 
      lblConfirmation.Visible = true; 
      btnStarOver.Visible = true; 
      btnOK.Visible = true; 
      lblConfirmation.Text = "Hours on " + Utilities.SelectedDate + " For Charge Code " + Utilities.Description; 
     } 
     catch (Exception ex) 
     { 
      Utilities.ErrorLog(ex.Message, ex.GetType().ToString(), ex.StackTrace, @"Time_Tracker.txt"); 
     } 
    } 

ответ

0

ли много устранения неполадок сегодня. обнаружил, что при выборе зарядного кода он будет делать pageload без запуска обработчика события «change index». По завершении pageload он инициирует событие изменения индекса с выбранным первым выбором (индекс 1). Все, с кем я разговаривал, говорили, что это должно работать так, как есть. Я, наконец, написал часть запроса/databind, чтобы заполнить раскрывающийся список вместо использования хранимой процедуры, и теперь он работает. Я включил изменение кода, если это поможет людям в будущем.

  protected void ddlProjects_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     try 
     { // When user selects the Project, Populate Charge Codes for the selected Project 
      ddlChargeCodes.Visible = true; 
      if (!string.IsNullOrEmpty(ddlProjects.SelectedValue)) 
      {     
       ddlChargeCodes.Items.Clear(); 
       string strConn = Time_Tracker.DAL.DBUtils.SqlConnectionString; 
       SqlConnection con = new SqlConnection(strConn); 
       SqlCommand cmd = new SqlCommand(); 
       cmd.Connection = con; 
       cmd.CommandType = CommandType.Text; 
       cmd.CommandText = "SELECT Charge_Code, Charge_Code + ' - ' + Description AS Description FROM [Time_Tracker].[dbo].[Tasks] WHERE Inactive = 0 AND Project_ID = " + ddlProjects.SelectedValue; 
       DataSet objDs = new DataSet(); 
       SqlDataAdapter dAdapter = new SqlDataAdapter(); 
       dAdapter.SelectCommand = cmd; 
       con.Open(); 
       dAdapter.Fill(objDs); 
       con.Close(); 
       if (objDs.Tables[0].Rows.Count > 0) 
       { 
        ddlChargeCodes.DataSource = objDs.Tables[0]; 
        ddlChargeCodes.DataTextField = "Description"; 
        ddlChargeCodes.DataValueField = "Charge_Code"; 
        ddlChargeCodes.DataBind(); 
        ddlChargeCodes.Items.Insert(0, "PLEASE SELECT A CHARGE CODE"); 
       } 

       Utilities.Project = Convert.ToInt16(ddlProjects.SelectedValue); 
      } 
     } 
     catch (Exception ex) 
     { 
      Utilities.ErrorLog(ex.Message, ex.GetType().ToString(), ex.StackTrace, @"Time_Tracker.txt"); 
     } 
    } 

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

  • Нет связанных вопросов^_^