2015-06-21 87 views
1

在我的應用程序中,我有一個網格視圖和一個保存任務按鈕。當我點擊保存任務我的按鈕時,網格視圖不會刷新,但當我點擊瀏覽器的刷新按鈕網格刷新並自動添加數據庫中的另一個任務。我想要的只是當點擊保存任務按鈕時刷新網格,而在點擊瀏覽器刷新按鈕時不添加任務。網格視圖只刷新頁面時更新

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; 

public partial class Default2 : System.Web.UI.Page 
{ 
    static string startdate; 
    DataTable dt; 
    static string enddate; 
    static string EstDate; 
    string str = @"Data Source=ALLAH_IS_GREAT\sqlexpress; Initial Catalog = Task_Manager; Integrated Security = true"; 

    protected void Page_Load(object sender, EventArgs e) 
    {//Page dosn't go back// 
     HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); 
     Response.Cache.SetNoStore(); 





     if (IsPostBack) 
     { 
      if (Session["auth"] != "ok") 
      { 
       Response.Redirect("~/Login.aspx"); 


      } 
      else if (Session["desg"] != "Scrum Master") 
      { 
       //Response.Redirect("~/errorpage.aspx"); 
       addtaskbtnPannel.Visible = false; 
      } 


     } 
     else 
     { 
      GridView1.DataSource = dt; 
      GridView1.DataBind(); 
      if (Session["auth"] != "ok") 
      { 

       Response.Redirect("~/Login.aspx"); 

      } 
      else if (Session["desg"] != "Scrum Master") 
      { 
       // Response.Redirect("~/errorpage.aspx"); 
       addtaskbtnPannel.Visible = false; 
      } 

     } 

     //decode url data in query string 
     labelID.Text = HttpUtility.UrlDecode(Request.QueryString["Id"]); 
     labelDur.Text = HttpUtility.UrlDecode(Request.QueryString["Duration"]); 
     labelStatus.Text = HttpUtility.UrlDecode(Request.QueryString["Status"]); 
     String pId = HttpUtility.UrlDecode(Request.QueryString["pID"]); 
     string query = "Select * from Tasks where S_ID=" + labelID.Text; 
     SqlConnection con = new SqlConnection(str); 
     SqlCommand com = new SqlCommand(query, con); 
     con.Open(); 
     SqlDataReader sdr = null; 
     sdr = com.ExecuteReader(); 
     dt = new DataTable(); 
     dt.Columns.AddRange(new DataColumn[5] { new DataColumn("Id"), new DataColumn("Description"), new DataColumn("Status"), new DataColumn("Sprint_ID"), new DataColumn("pID") }); 
     while (sdr.Read()) 
     { 
      dt.Rows.Add(sdr["T_ID"].ToString(), sdr["T_Description"].ToString(), sdr["T_Status"].ToString(), labelID.Text,pId); 
     } 

     GridView1.DataSource = dt; 
     GridView1.DataBind(); 
     con.Close(); 
     if (!IsPostBack) 
     { 
      PanelTaskForm.Visible = false; 
      Panel1.Visible = false; 
     } 
     else if(IsPostBack){ 
      PanelTaskForm.Visible = true; 
      Panel1.Visible = true; 
     } 
    } 
    protected void saveTask_Click(object sender, EventArgs e) 
    { 
      string str = @"Data Source=ALLAH_IS_GREAT\sqlexpress; Initial Catalog = Task_Manager; Integrated Security = true"; 
     try 
     { 

      String query = "insert into Tasks (T_Description, T_Status,S_ID,StartDate,EstEndDate) values('" + TaskDesBox.Text + "', 'incomplete','" + labelID.Text + "' ,'" + startdate + "','" + EstDate + "');"; 
      SqlConnection con = new SqlConnection(str); 
      SqlCommand com = new SqlCommand(query, con); 
      con.Open(); 

      if (com.ExecuteNonQuery() == 1) 
      { 
       TaskStatus.Text = "Task Successfully Saved "; 
       GridView1.DataBind(); 

      } 
      else 
      { 

       TaskStatus.Text = "Task not Saved"; 
      } 

     } 
     catch (Exception ex) 
     { 
      Response.Write("reeor" + ex); 
     } 
    } 
    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

    } 
    protected void TaskDesBox_TextChanged(object sender, EventArgs e) 
    { 


    } 

    protected void LinkButton1_Click(object sender, EventArgs e) 
    { 
     Calendar1.Visible = true; 
    } 

    protected void Calendar1_SelectionChanged(object sender, EventArgs e) 
    { 
     startdate = Calendar1.SelectedDate.ToString("yyyy-MM-dd hh:mm:ss"); 
     SDate.Text = startdate; 
     Calendar1.Visible = false; 
    } 

    protected void LinkButton2_Click(object sender, EventArgs e) 
    { 
     Calendar2.Visible = true; 
    } 

    protected void Calendar2_SelectionChanged(object sender, EventArgs e) 
    { 
     EstDate = Calendar2.SelectedDate.ToString("yyyy-MM-dd hh:mm:ss"); 
     EstDateBox.Text = EstDate; 
     Calendar2.Visible = false; 



    } 

} 
+0

題外話,直接插入用戶輸入的值到您的sql命令是一個壞主意。它使您的程序非常容易受到SQL注入攻擊。 – Sami

回答

1

你在做一個帖子的回覆是:

  1. 首秀由於代碼的結果在你的Page_Load
  2. 然後,執行事件處理程序,所以如果你按下保存按鈕時,將執行saveTask_Click,它將向數據庫添加一條記錄。你不更新你的網格視圖數據源,但只是調用DataBind()之後仍然綁定原始數據源。

Imo您不應該更新Page_Load上的網格視圖。您應該只在GET(!IsPostBack)上顯示它。 在saveTask_Click結束時,您必須再次更新網格視圖。

所以打動你需要顯示網格視圖,您可以在其他場合調用一個方法的代碼:

protected void ShowGridView() { 
    String pId = HttpUtility.UrlDecode(Request.QueryString["pID"]); 
    string query = "Select * from Tasks where S_ID=" + labelID.Text; 
    SqlConnection con = new SqlConnection(str); 
    SqlCommand com = new SqlCommand(query, con); 
    con.Open(); 
    SqlDataReader sdr = null; 
    sdr = com.ExecuteReader(); 
    dt = new DataTable(); 
    dt.Columns.AddRange(new DataColumn[5] { new DataColumn("Id"), new DataColumn("Description"), new DataColumn("Status"), new DataColumn("Sprint_ID"), new DataColumn("pID") }); 
    while (sdr.Read()) 
    { 
     dt.Rows.Add(sdr["T_ID"].ToString(), sdr["T_Description"].ToString(), sdr["T_Status"].ToString(), labelID.Text,pId); 
    } 

    GridView1.DataSource = dt; 
    GridView1.DataBind(); 
    con.Close(); 
} 

然後調用它在你的Page_Load上的IsPostBack

if (!IsPostBack) 
    { 
     ShowGridView(); 
     PanelTaskForm.Visible = false; 
     Panel1.Visible = false; 
    } 
    else if(IsPostBack){ 
     PanelTaskForm.Visible = true; 
     Panel1.Visible = true; 
    } 

再經過在saveTask_Click中添加行,您可以調用ShowGridView()來查看新結果。

 if (com.ExecuteNonQuery() == 1) 
     { 
      TaskStatus.Text = "Task Successfully Saved "; 
      //GridView1.DataBind(); 
      ShowGridView(); 
     } 
     else 
     { 

      TaskStatus.Text = "Task not Saved"; 
     }