2016-04-04 4 views
0

Ich habe ein Problem mit einer DropDownList Dispaying Studentennamen. Aus irgendeinem Grund verliert es Gegenstände, nachdem ich auf eine Schaltfläche geklickt habe, die für die Einstufung verwendet wird. Ich würde gerne einen Weg finden, diese Gegenstände zu bewahren. Die Schaltfläche filtert in keiner Weise die angezeigten Schüler. In den resultierenden DropDownLists sollte Autopostback ebenfalls als true festgelegt sein. Die Namen der Schüler werden im Code hinterher nicht abgerufen oder geändert, daher bin ich mir nicht sicher, warum die Namen aus dieser DropDownList verschwinden. Alle Hinweise/Lösungen wären willkommen. Update: Ich habe Code aus dem Front-End und Code aus der .cs-Datei für die Schaltfläche, die die Markierung für den Schüler sendet Code beigefügt. Nach Eingabe einer Punktzahl und Zurückgehen zum Modul wurde das für das Verschwinden der Artikel eingegebene Problem angezeigt.Disappearing Elemente auf 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

nur eine mögliche Vermutung von einem gemeinsamen Fehler, den ich verwenden, in der Vergangenheit zu tun. Stellen Sie sicher, dass Dinge, die nur einmal auf Page_Load passieren müssen, in if (! IsPostback) {...} enthalten sind. Oder warum verschieben Sie die Codes nicht auf das Ereignis Page_Load? Ich bin nicht besonders begeistert von der Idee, die Benutzeroberfläche zum Festlegen der Abfragen zu verwenden. Stattdessen führe ich diese Abfragen aus und binde die Ergebnisse genau dann an, wenn ich es möchte (in diesem Fall vielleicht auf Page_Load). –

+0

@spiros versuchen zu überprüfen, wo Sie Ihren Dropdown-Code – Webruster

+0

@Webbruster Die DropDown-Daten sind nur vom Frontend und ändert sich entsprechend den Werten in den anderen zwei DropDowns Ich habe – Spiros

Antwort

0

Mein erster Gedanke, dass Sie wahrscheinlich nicht zur Zeit geprüft wird, ob ein PostBack auftreten oder nicht innerhalb der Page_Load Veranstaltung Ihrer Seite, die Ihre Daten zu veranlassen, wird jedes Mal erholen.

Sie können dies in der Regel beheben, indem Sie einfach einen Schecks im Page_Load Ereignisse Durchführung selbst:

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

Hallo, wenn ich StudentsList.DataSource = SQLStudentList; StudentsList.DataBind(); in der Überprüfung, ob Postback-Methode bekomme ich keine Ergebnisse in der Dropdown-Liste. In meinem Frontend hängt diese DropDownLists von den ausgewählten Werten der anderen beiden DropDownLists ab. Sie werden mit Daten gefüllt, – Spiros

+0

Wenn Sie den 'DataBind()' Aufruf (und vorherige Einstellung der Datenquelle) innerhalb der If-Anweisung ausführen, sollte der Code wie erwartet funktionieren. Hast du sonst noch einen anderen Code? –

+0

Ich habe meine Seite in den Code hinter – Spiros