2016-04-04 3 views
0

У меня возникла проблема с именами учеников DropDownList. По какой-то причине он теряет элементы после нажатия кнопки, которая используется для присвоения им класса. Я бы хотел найти способ сохранить эти предметы. Кнопка никоим образом не фильтрует отображаемых учеников. Полученные в результате DropDownLists также должны иметь значение autopostback как true. Имена учеников не извлекаются и не изменяются в коде, поэтому я не уверен, почему имена исчезают из этого DropDownList. Любые подсказки/решения будут приветствоваться. Обновление. Я добавил код с переднего конца, а также код из файла .cs для кнопки, которая отправляет отметку для ученика. После ввода оценки и возврата к модулю он был введен для проблемы исчезновения предметов.Исчезающие элементы на DropDownList

<asp:SqlDataSource 
    ID="SQLStudentList" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:UniString %>" 
    SelectCommand="SELECT DISTINCT students_profile.user_id, (first_name + ' ' + last_name) AS studentDetails FROM students_profile INNER JOIN classlist ON students_profile.user_id = classlist.user_id INNER JOIN class ON class.class_id = classlist.class_id INNER JOIN student_module_grade ON classlist.classlist_id = student_module_grade.classlist_id INNER JOIN student_module_repeat_grades ON student_module_grade.classlist_id = student_module_repeat_grades.classlist_id WHERE class.pathway_year_id = @idpathway AND student_module_grade.module_on_pathway_id [email protected] OR [email protected]"> 

    <SelectParameters> 
    <asp:ControlParameter Name="idpathway" ControlID="degreeProgDropDown" Type="String"/> 
    <asp:ControlParameter ControlID="modDropDown" Name="modpwayid" /> 
    </SelectParameters> 
</asp:SqlDataSource> 
<asp:DropDownList ID="StudentsList" 
    OnSelectedIndexChanged="StudentsList_SelectedIndexChanged" 
    runat="server" 
    width="420" 
    AutoPostBack="true" 
    EnableViewState="true" 
    DataSourceID="SQLStudentList" 
    DataTextField="studentDetails" 
    DataValueField="user_id"> 
</asp:DropDownList> 


    protected void Page_Load(object sender, EventArgs e) 
{ 



    ////If there are no students the message below will be displayed 
    ListItem selectedItem = StudentsList.SelectedItem; 
    if (selectedItem != null && !String.IsNullOrEmpty(selectedItem.Text)) 
    { 

    } 
    else 
    { 
     changedFlag.Visible = true; 
     changedFlag.Text = "There are currently no grades to change for any students for this module on this pathway"; 
     changedFlag.ForeColor = System.Drawing.Color.Red; 
     EnterFinalMark.Visible = false; 
     finalMarkAssignment.Visible = false; 
     submitAssignmentMark.Visible = false; 
     repeatSubmitAssignmentMark.Visible = false; 
    } 
    if (!IsPostBack) 
    { 

     StudentsList.DataSource = SQLStudentList; 
     StudentsList.DataBind(); 
     String userName = Session["UserLoggedOn"].ToString(); 

     String conString = WebConfigurationManager.ConnectionStrings["UniString"].ConnectionString; 
     SqlConnection myCon = new SqlConnection(conString); 

     myCon.Open(); 


     String pathwaySelectionQuery = "SELECT pathway_years.id, pathway_years.pathway_year, pathway FROM pathways INNER JOIN pathway_years ON pathways.id = pathway_years.pathway_id"; 
     SqlCommand pathwaySelectionQuerycmd = new SqlCommand(pathwaySelectionQuery, myCon); 
     SqlDataReader pwayReader = pathwaySelectionQuerycmd.ExecuteReader(); 
     while (pwayReader.Read()) 
     { 
      //Put pathway year id in this table instead 
      degreeProgDropDown.Items.Add(new ListItem(pwayReader["pathway_year"] + ": " + pwayReader["pathway"].ToString(), pwayReader["id"].ToString())); 


     } 


     myCon.Close(); 

    } 
} 

    protected void repeatSubmitAssignmentMark_Click(object sender, EventArgs e) 
{ 
    String connectionString = WebConfigurationManager.ConnectionStrings["UniString"].ConnectionString; 
    SqlConnection myConnection = new SqlConnection(connectionString); 
    myConnection.Open(); 
    String repeatModgradeID = "SELECT repeat_module_grade_id from student_module_repeat_grades WHERE module_on_pathway_id = '" + modDropDown.SelectedValue + "'"; 
    SqlCommand repeatModuleGradeIDCommand = new SqlCommand(repeatModgradeID, myConnection); 

    Int32 repeatModGradeIDResult = Convert.ToInt32(repeatModuleGradeIDCommand.ExecuteScalar().ToString()); 
    String repeatFindUserID = "SELECT classlist_id from classlist WHERE user_id = '" + StudentsList.SelectedValue + "'"; 
    SqlCommand repeatFindUserIDCommand = new SqlCommand(repeatFindUserID, myConnection); 

    Int32 repeatClasslistval = Convert.ToInt32(repeatFindUserIDCommand.ExecuteScalar().ToString()); 
    String modOnPwayValue = modDropDown.SelectedValue; 
    String repeatGrade = finalMarkAssignment.Text; 
    Int32 repeatGradeval = Convert.ToInt32(repeatGrade); 
    //Grade is a pass if it is equal to or greater than 40- otherwise it is a fail 
    if (repeatGradeval >= 40) 
    { 
     //Pass assigned to the string which will be added to the table 
     String passOrFail = "Pass"; 
     //Assigned to label 
     pOrF.Text = passOrFail; 

    } 
    else 
    { 
     //Fail assigned to the string which will be added to the table 
     String passOrFail = "Fail"; 
     //Assigned to label 
     pOrF.Text = passOrFail; 
    } 
    if (repeatGradeval >= 0 && repeatGradeval <= 100) 
    { 
     changedVAL.Visible = false; 
     SqlCommand addAssignmentGradeCommand = new SqlCommand("UPDATE student_module_repeat_grades SET [email protected],[email protected],[email protected],[email protected],changed=1 WHERE module_on_pathway_id = '" + modDropDown.SelectedValue + "'", myConnection); 
     addAssignmentGradeCommand.Parameters.AddWithValue(@"modOnPwayValue", modOnPwayValue); 
     addAssignmentGradeCommand.Parameters.AddWithValue(@"repeatClasslistid", repeatClasslistval); 
     addAssignmentGradeCommand.Parameters.AddWithValue(@"grade", repeatGradeval); 
     addAssignmentGradeCommand.Parameters.AddWithValue(@"PF", pOrF.Text); 
     addAssignmentGradeCommand.ExecuteNonQuery(); 
     myConnection.Close(); 
     success.Visible = true; 
     ClientScript.RegisterStartupScript(this.GetType(), "alert", "HideLabel();", true); 
     success.ForeColor = System.Drawing.Color.Green; 
     repeatSubmitAssignmentMark.Visible = false; 

    } 
    else 
    { 
     changedVAL.Visible = true; 
     changedVAL.Text = "Please enter a grade between 0 and 100"; 
     changedVAL.ForeColor = System.Drawing.Color.Red; 
    } 
} 
+0

Просто возможное предположение от общей ошибки, которую я использовал, чтобы сделать в прошлом. Убедитесь, что вещи, которые должны произойти только один раз на странице_Load, находятся внутри if (! IsPostback) {...}. Или, на самом деле, почему бы вам не переместить коды на событие Page_Load? Мне особенно не нравится идея использования пользовательского интерфейса для установки запросов. Скорее, я выполняю эти запросы и привязываю результаты точно, когда я хочу, чтобы это произошло (в данном случае, возможно, на странице_Load). –

+0

@spiros попытаются проверить, где вы заполняете свой код выпадающего кода – Webruster

+0

@Webruster Данные DropDown взяты только с лицевой стороны и меняются в соответствии с значениями в двух других DropDowns У меня есть – Spiros

ответ

0

Моя первоначальная мысль, что это вы, вероятно, в настоящее время не проверяет, установлен ли PostBack происходит или нет в Page_Load случае вашей страницы, которая будет вызывать ваши данные будут восстанавливаться каждый раз.

Вы можете вообще решить эту проблему, просто выполняя проверку внутри самого Page_Load события:

protected void Page_Load(object sender, EventArgs e) 
{ 
    // If it is an initial load 
    if(!IsPostBack) 
    { 
     // Then perform your one-time data binding here 
     StudentsList.DataSource = SQLStudentList; 
     StudentsList.DataBind(); 
    } 
    // Business as usual 
} 
+0

Привет, когда я поставил StudentsList.DataSource = SQLStudentList; StudentsList.DataBind(); в проверке, если метод обратной передачи я не получаю никаких результатов в раскрывающемся списке. В моем интерфейсе DropDownLists зависит от выбранных значений от двух других DropDownLists. Они заполнены данными, – Spiros

+0

Если вы выполняете вызов DataBind() (и предыдущий параметр источника данных) в if-statement, тогда код должен работать как ожидалось. У вас есть другой код, кроме этого? –

+0

Я разместил загрузку своей страницы в коде за – Spiros

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