我已经绑定了数据源并且已经正确显示了,然后我在它的RowEditing中键入了如下代码
GridView1.EditIndex = e.NewEditIndex;
getdata();//这是我的数据绑定方法在RowUpdating事件中键入了如下代码
name = ((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
Response.Write(name);
可是取到的值是先前原来的,但是我想这样取的应该是当前编辑的吧。

解决方案 »

  1.   

    PageLoad绑定数据的时候记得要
    if (!Page.IsPostBack)
        {}
      

  2.   

    DEMO
     protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                bind();
            }
        }
        /// <summary>
        /// 在单击 GridView 控件内某一行的 Update 按钮(其 CommandName 属性设置为"Update"的按钮)时发生,但在 GridView 控件更新记录之前。此事件通常用于取消更新操作。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            string ID = GridView1.DataKeys[e.RowIndex].Value.ToString();
            string Emp_ID = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[0].Controls[0])).Text.ToString().Trim();
            string Emp_RealName = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim();
            string Emp_Sex = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim();
            string Emp_Address = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim();
            string sqlStr = "update Employee set EmpID='" + Emp_ID + "',EmpRealName='" + Emp_RealName + "',EmpSex='" + Emp_Sex + "',EmpAddress='" + Emp_Address + "' where ID=" + ID + "";
            Common.ExecuteSql(sqlStr);
            GridView1.EditIndex = -1;
            bind();
        }
        /// <summary>
        /// 在单击 GridView 控件内某一行的 Edit 按钮(其 CommandName 属性设置为“Edit”的按钮)时发生,但在 GridView 控件进入编辑模式之前。此事件通常用于取消编辑操作。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            bind();
        }
        /// <summary>
        /// 在单击 GridView 控件内某一行的 Cancel 按钮(其 CommandName 属性设置为“Cancel”的按钮)时发生,但在 GridView 控件退出编辑模式之前。此事件通常用于停止取消操作。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            GridView1.EditIndex = -1;
            bind();
        }
         /// <summary>
        /// 数据绑定
        /// </summary>
        public void bind()
        {
            string sqlStr = "select * from Employee";
            DataSet myds = Common.dataSet(sqlStr);
            GridView1.DataSource = myds;
            GridView1.DataKeyNames = new string[] { "ID" };
            GridView1.DataBind();
        }
      

  3.   

    是不是因为每次点击那个更新的时候 都会先响Page_Load?
      

  4.   

    因为asp.net会自动回复控件的状态(包括内部的自控件)。假设你在page_Load的时候重新读取数据来绑定控件,不但异常缓慢、浪费资源,而且这个时候明明是要让上一次输出html的时候的控件重新创建,怎么去读取数据库中最新的数据呢(数据库中数据的改变,实际上会经常造成重新绑定的控件的内部错误而抛出类似“控件的ID相同但是结构错误”之类的严重异常来)。所以根本不能重新去绑定控件,而是使用asp.net自动保存的上一次输出html时的状态。
      

  5.   


    当然。这是asp.net生命周期。每一次请求服务器处理,包括回发的时候,服务器都要创建页面对象。然后处理page_load、各种事件,最后Render输出html,然后就销毁页面对象。在一瞬间Page就产生、然后销毁了。