2016-04-04 24 views
0

DropDownList gönderen öğrenci adlarıyla ilgili bir sorun yaşıyorum. Bazı nedenlerden dolayı, bir notu tıkladığımda, bir notu verdikten sonra öğeleri kaybeder. Bu öğeleri korumak için bir yol bulmak istiyorum. Düğme, herhangi bir şekilde, görüntülenen öğrencileri filtrelemez. Sonuçta oluşan DropDownLists de, otomatik olarak doğru olarak ayarlanmış olmalıdır. Öğrenci isimleri arkasındaki kodda alınmaz veya değiştirilmez, bu yüzden isimlerin neden bu DropDownList'ten kaybolacağından emin değilim. Herhangi bir ipucu/çözümler memnuniyetle karşılanacaktır. Güncelleme: Ön uçtan kod ekledim ve ayrıca öğrenci için işaret gönderen düğme için .cs dosyasından kod yazdım. Bir puan girildikten ve modülün geri dönmesinden sonra kaybolan eşyaların girilmesi sorunu ortaya çıkmaktadır.DropDownList öğesindeki öğeler kayboluyor

<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

Sadece olası bir tahmin geçmişte yapmak için kullanılan ortak bir hatadan. Eğer (! IsPostback) {...} ise, Page_Load içinde bir kez olması gereken şeyleri sağlayın. Veya aslında, Page_Load olayında neden kodları taşıyorsunuz? Sorguları belirlemek için kullanıcı arayüzünü kullanma fikrini özellikle beğenmiyorum. Daha ziyade, bu sorguları yürütüyorum ve sonuçları tam olarak olmasını istediğimde (bu durumda, belki de Page_Load üzerinde) kesin. –

+0

@spiros dropdown kodunuzu nerede doldurduğunuzu kontrol etmeye çalışın – Webruster

+0

@Webruster DropDown verileri sadece ön uçtan ve diğer iki DropDowns'daki değerlere göre değişiyor – Spiros

cevap

0

Benim ilk bir PostBack veri her zaman ribaund olmasına neden oluyor Sayfanızın Page_Load olay, içinde oluşan olup olmadığını şu anda kontrol etmiyor muhtemel olduğunu düşündüm.

Genellikle sadece Page_Load olayın kendi içinde bir çek gerçekleştirerek bu çözebilirsiniz:

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

Merhaba, StudentsList.DataSource = SQLStudentList 'i yerleştirdiğimde; StudentsList.DataBind(); geri gönderme yönteminde, açılır listede herhangi bir sonuç alamıyor mu diye kontrol edin. Ön uçumda, bu DropDownLists diğer iki DropDownLists öğesinden seçilen değerlere bağlıdır. Veriler, – Spiros

+0

ile doldurulur If-deyimi içinde 'DataBind()' çağrısı (ve veri kaynağının önceki ayarı) gerçekleştiriyorsanız, kod beklendiği gibi çalışıyor olmalıdır. Bunun dışında başka bir kodunuz var mı? –

+0

Sayfam yükümü, – Spiros

İlgili konular