2015-09-30 2 views
0

Как я могу реализовать свой флажок, чтобы оставаться в нем, так как он даже перенаправляется на другую страницу? Например, в моем коде, когда я устанавливаю флажок, система обновляет базу данных, и она говорит «Validated», но когда я нажимаю событие GoBackTeacher_Click, он перенаправляется на другую страницу. На этой другой странице есть функция кнопки, которая будет перенаправляться на эту текущую страницу, где реализована функция моего кода, и установлен флажок.Как установить флажок всегда, когда пользователь перенаправляется на другую страницу?

Aspx Код:

<div class="container" style="text-align: center; margin: 0 auto;"> 
    <br /> 
    <h1>Validation of Subjects</h1> 
    <br /> 
    <asp:GridView runat="server" CssClass="table table-hover table-bordered" ID="ValidateSubject" Style="text-align: center"></asp:GridView> 
</div> 

<div style="float: right; padding-right: 75px;"> 
    <button type="button" runat="server" class="btn btn-success" onserverclick="GoBackTeacher_Click">Go Back</button> 
</div> 

Код За:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Data; 

namespace SoftwareAnalysisAndDesign.SAD 
{ 
    public partial class ValidateSubjectTeacher : System.Web.UI.Page 
    { 
     CheckBox check = new CheckBox(); 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (Session["ValidateSubject"] == null) 
      { 
       Response.Redirect("TeacherPage.aspx", true); 
      } 

      if (!IsPostBack) 
      { 
       ValidateSubject.DataSource = Session["ValidateSubject"]; 
       ValidateSubject.DataBind(); 
      } 
      //Add a checkbox in the last row of GridView Progmatically 
      foreach (GridViewRow row in ValidateSubject.Rows) 
      { 
       check = row.Cells[row.Cells.Count - 1].Controls[0] as CheckBox; //position Check column on last row in gridview 
       check.Enabled = true; 
       check.CheckedChanged += ValidateSubject_Click; //Bind the event on the button 
       check.AutoPostBack = true; //Set the AutoPostBack property to true 
      } 
     } 
     protected void ValidateSubject_Click(object sender, EventArgs e) 
     { 
      CheckBox chk = (CheckBox)sender; 
      GridViewRow grvRow = (GridViewRow)chk.NamingContainer;//This will give row 

      string validated = "Validated"; 
      string notyetvalidated = "Not yet validated"; 
      string studid = grvRow.Cells[0].Text; 
      string coursenum = grvRow.Cells[1].Text; 

      if (chk.Checked) 
      { 
       grvRow.Cells[10].Text = validated; 
       //Open Connection 
       using (SqlConnection conn = new SqlConnection("Data Source=Keith;Initial Catalog=SAD;Integrated Security=True")) 
       { 
        //Open Connection to database 
        try 
        { 
         conn.Open(); 
        } 
        catch (Exception E) 
        { 
         Console.WriteLine(E.ToString()); 
        } 

        using (SqlCommand cmd = new SqlCommand("Update AssessmentForm set Status = @Validated where StudentID = @studentID and CourseNo = @Coursenumber" ,conn)) 
        { 
         cmd.Parameters.AddWithValue("@Validated", validated); 
         cmd.Parameters.AddWithValue("@studentID", studid); 
         cmd.Parameters.AddWithValue("@Coursenumber", coursenum); 
         cmd.ExecuteNonQuery(); 
        } 

        //Close Connection to database 
        try 
        { 
         conn.Close(); 
        } 
        catch (Exception E) 
        { 
         Console.WriteLine(E.ToString()); 
        } 
       } 
      } 
      else 
      { 
       grvRow.Cells[10].Text = notyetvalidated; 
       //Open Connection 
       using (SqlConnection conn = new SqlConnection("Data Source=Keith;Initial Catalog=SAD;Integrated Security=True")) 
       { 
        //Open Connection to database 
        try 
        { 
         conn.Open(); 
        } 
        catch (Exception E) 
        { 
         Console.WriteLine(E.ToString()); 
        } 
        //query database to update the Status 
        using (SqlCommand cmd = new SqlCommand("Update AssessmentForm set Status = @Validated where StudentID = @studentID and CourseNo = @Coursenumber", conn)) 
        { 
         cmd.Parameters.AddWithValue("@Validated", notyetvalidated); 
         cmd.Parameters.AddWithValue("@studentID", studid); 
         cmd.Parameters.AddWithValue("@Coursenumber", coursenum); 
         cmd.ExecuteNonQuery(); 
        } 

        //Close Connection to database 
        try 
        { 
         conn.Close(); 
        } 
        catch (Exception E) 
        { 
         Console.WriteLine(E.ToString()); 
        } 
       } 
      } 
     } 
     protected void GoBackTeacher_Click(object sender, EventArgs e) 
     { 
      Response.Redirect("TeacherPage.aspx"); 
     } 
    } 
} 

Чтобы лучше понять мой вопрос, здесь изображение для дальнейшего объяснения.

Это когда я установите флажок, не нажимая на кнопку вернуться

enter image description here

И это где я иду нажимается идти кнопку назад и в другой странице есть проследовать кнопка для перенаправления на этот Текущая страница, где находится gridview.

enter image description here

Там флажок снят, а состояние говорит, что это подтверждается. Как реализовать мой код, который установлен флажок?

Как это связано с обратной передачей? Пожалуйста помоги.

UPDATE

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

 foreach (GridViewRow row in ValidateSubject.Rows) 
     { 
      bool isChecked = default(bool); 
      if (row.Cells[row.Cells.Count - 2].Text.Equals("Validated")) // Here please assign the position of **Status** column. 
      { 
       isChecked = true; 
       check = row.Cells[row.Cells.Count - 1].Controls[0] as CheckBox; //position Check column on last row in gridview 
       check.Enabled = true; 
       check.CheckedChanged += ValidateSubject_Click; //Bind the event on the button 
       check.AutoPostBack = true; //Set the AutoPostBack property to true 
       check.Checked = isChecked; //Set checkbox checked based on status ; 
      } 
      else if (row.Cells[row.Cells.Count - 2].Text.Equals("Not yet validated")) 
      { 
       isChecked = false; 
       check = row.Cells[row.Cells.Count - 1].Controls[0] as CheckBox; //position Check column on last row in gridview 
       check.Enabled = true; 
       check.CheckedChanged += ValidateSubject_Click; //Bind the event on the button 
       check.AutoPostBack = true; //Set the AutoPostBack property to true 
       check.Checked = isChecked; //Set checkbox checked based on status ; 
      } 
     } 

В этой функции условие выше, не изменил базу данных, вместо этого он будет только обновить страницу, когда флажок щелкнули.

protected void ValidateSubject_Click(object sender, EventArgs e) 
     { 
      CheckBox chk = (CheckBox)sender; 
      GridViewRow grvRow = (GridViewRow)chk.NamingContainer;//This will give row 

      string validated = "Validated"; 
      string notyetvalidated = "Not yet validated"; 
      string studid = grvRow.Cells[0].Text; 
      string coursenum = grvRow.Cells[1].Text; 

      if (chk.Checked) 
      { 
       grvRow.Cells[10].Text = validated; 
       //Open Connection 
       using (SqlConnection conn = new SqlConnection("Data Source=Keith;Initial Catalog=SAD;Integrated Security=True")) 
       { 
        //Open Connection to database 
        try 
        { 
         conn.Open(); 
        } 
        catch (Exception E) 
        { 
         Console.WriteLine(E.ToString()); 
        } 

        using (SqlCommand cmd = new SqlCommand("Update AssessmentForm set Status = @Validated where StudentID = @studentID and CourseNo = @Coursenumber" ,conn)) 
        { 
         cmd.Parameters.AddWithValue("@Validated", validated); 
         cmd.Parameters.AddWithValue("@studentID", studid); 
         cmd.Parameters.AddWithValue("@Coursenumber", coursenum); 
         cmd.ExecuteNonQuery(); 
        } 

        //Close Connection to database 
        try 
        { 
         conn.Close(); 
        } 
        catch (Exception E) 
        { 
         Console.WriteLine(E.ToString()); 
        } 
       } 
      } 
      else 
      { 
       grvRow.Cells[10].Text = notyetvalidated; 
       //Open Connection 
       using (SqlConnection conn = new SqlConnection("Data Source=Keith;Initial Catalog=SAD;Integrated Security=True")) 
       { 
        //Open Connection to database 
        try 
        { 
         conn.Open(); 
        } 
        catch (Exception E) 
        { 
         Console.WriteLine(E.ToString()); 
        } 
        //query database to update the Status 
        using (SqlCommand cmd = new SqlCommand("Update AssessmentForm set Status = @Validated where StudentID = @studentID and CourseNo = @Coursenumber", conn)) 
        { 
         cmd.Parameters.AddWithValue("@Validated", notyetvalidated); 
         cmd.Parameters.AddWithValue("@studentID", studid); 
         cmd.Parameters.AddWithValue("@Coursenumber", coursenum); 
         cmd.ExecuteNonQuery(); 
        } 

        //Close Connection to database 
        try 
        { 
         conn.Close(); 
        } 
        catch (Exception E) 
        { 
         Console.WriteLine(E.ToString()); 
        } 
       } 
      } 
     } 
+0

** Заголовок ** **, имеющий значения столбца как ** подтвержденные ** и ** Пока нет .. **. Здесь вы меняете бит в базе данных, поэтому в момент привязки вы можете установить флажок ** true ** или false ** false ** на основе бит состояния. – Prabhat

+0

Пожалуйста, поделитесь разметкой Gridview, которая была бы более полезной. – Prabhat

+0

Мое gridview - это сгенерированные автоматически столбцы sir, поэтому я получаю все данные и привязываю их к datatable. Не могли бы вы предоставить пример кода сэра, чтобы показать, как это делается? –

ответ

1

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

В gridview столбец статуса Я думаю, вы сохраняете его в тексте не так, чтобы сравнить его как текст. См. Следующие и внедрить их.

foreach (GridViewRow row in ValidateSubject.Rows) 
{ 
    bool isChecked = default(bool); 
    if (row.Cells[row.Cells.Count - 1].Text.Equals("Validated")) // Here please assign the position of **Status** column. 
      isChecked = true; 
    check = row.Cells[row.Cells.Count - 1].Controls[0] as CheckBox; //position Check column on last row in gridview 
    check.Enabled = true; 
    check.CheckedChanged += ValidateSubject_Click; //Bind the event on the button 
    check.AutoPostBack = true; //Set the AutoPostBack property to true 
    check.Checked = isChecked //Set checkbox checked based on status ; 
} 
+0

Код вызывает у меня ошибку sir, исключение типа «System.ArgumentOutOfRangeException» произошло в System.Web.dll, но не обрабатывался в коде пользователя Дополнительная информация: Указанный аргумент был вне допустимых значений. Извините, что я совершенно новичок в этом, где я могу назначить положение статуса? –

+0

Да, я бы упомянул в комментарии, что в 'Cells []' вам нужно добавить индекс столбца с именем ** Status **. Поскольку я не знаю позицию, поэтому вы должны сделать это самостоятельно, например, 'row.Cells.Count - 1' или' row.Cells.Count -2'. – Prabhat

+0

'row.Cells [<Добавить позицию здесь>]. Text.Equals (" Validated ")'. См. Мой обновленный ответ. – Prabhat

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