网格视图仅在页面刷新时更新

时间:2015-06-21 12:33:24

标签: asp.net sql-server gridview

在我的应用程序中,我有一个网格视图和一个保存任务按钮。当我单击保存任务我的按钮时,网格视图不刷新但当我单击浏览器的刷新按钮时,网格刷新并自动在数据库中添加另一个任务。我想要的是在单击保存任务按钮时刷新网格,而在单击浏览器刷新按钮时不添加任务。

{{1}}

1 个答案:

答案 0 :(得分:1)

你在帖子上做的是:

  1. 首先显示由于Page_Load
  2. 中的代码而导致的结果
  3. 然后执行事件处理程序,因此如果按下Save按钮,将执行saveTask_Click,这会向数据库添加记录。您不更新网格视图数据源,但之后只调用DataBind(),它仍绑定原始DataSource。
  4. 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";
            }