当前位置:编程学习 > C#/ASP.NET >>

GridView_Updating事件里更新不了新值...

代码: 

private void up()
    {
            DBConn con = new DBConn();
            string sql = "select * from test";
            DataSet ds = new DataSet();
            ds = con.ExecuteQuery(sql);
            this.GridView2.DataSource = ds.Tables[0];
            this.GridView2.DataBind();
            con.Close();
    }

protected void Page_Load(object sender, EventArgs e)
    {
            up();
    }

protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
    {
            this.GridView2.EditIndex = e.NewEditIndex;
            this.GridView2.DataBind();
            (GridView2.Rows[e.NewEditIndex].Cells[0].Controls[0] as TextBox).Enabled = false;
            up();
    }

protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        string getid = ((TextBox)GridView2.Rows[e.RowIndex].Cells[0].Controls[0]).Text.Trim();
        string name = ((TextBox)GridView2.Rows[e.RowIndex].Cells[1].Controls[0]).Text.Trim();
        string num = ((TextBox)GridView2.Rows[e.RowIndex].Cells[2].Controls[0]).Text.ToString().Trim();
        string address = ((TextBox)GridView2.Rows[e.RowIndex].Cells[3].Controls[0]).Text.Trim();
        DBConn con = new DBConn();
        string sql = "update test set name='" + name + "',num='" + num + "',address='" + address + "' where test_id='" + getid + "'";
        Boolean boo = con.ExecuteUpdate(sql);
        con.Close();
        this.GridView2.EditIndex = -1;
        up();
        this.Lblup.Text = "更新数据成功!";         
    }
当我点编辑的时候显示出了编辑状态,然后我就针对显示的编辑状态改变文本框里面的内容如name这一项原来是sun,我改为sunshine.再点保存后还是原来的值,郁闷死了。也试过在page_load里边加上if(!Page.IsPostback)但还是不行更新不了。OK,又断点调试,发现点保存的时候走到GridView_Updating事件里去逐个的执行:string name = ((TextBox)GridView2.Rows[e.RowIndex].Cells[1].Controls[0]).Text.Trim();的text的值还是原来那个sun根本就没有改变。晕死了,只有求助各位大侠的帮忙了. --------------------编程问答-------------------- protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
 up();
}
} --------------------编程问答-------------------- ls正解 --------------------编程问答-------------------- 试过的,还是不行的。哎..............郁闷完了! --------------------编程问答-------------------- string sql = "update test set name='" + name + "',num='" + num + "',address='" + address + "' where test_id='" + getid + "'";

执行这句时,name变量是否改变? --------------------编程问答-------------------- 改变了的,但还是原来那个值 --------------------编程问答-------------------- http://www.zhibin.cn/article.asp?id=10
看看上面的,有详细的说明几解决办法 --------------------编程问答-------------------- protected   void   Page_Load(object   sender,   EventArgs   e) 

if(!Page.IsPostBack) 

  up(); 

}

protected   void   GridView2_RowEditing(object   sender,   GridViewEditEventArgs   e) 

this.GridView2.EditIndex   =   e.NewEditIndex; 
up(); 
(GridView2.Rows[e.NewEditIndex].Cells[0].Controls[0]   as   TextBox).Enabled   =   false; 


--------------------编程问答-------------------- 楼上正解
你编辑的时候需要重新绑定过一次数据 --------------------编程问答--------------------     一个新的gridview总是需要给他指定一个datasouce,然后databind一下!他的功能很强大,但是总是会出现许多问题。

    这次讲的是gridview在使用自己的更新方法时,总是取到textbox未更新前的值。就是数据库原来的值。

    出现这种问题的朋友,你检查下是不是把databind写在了pageload里面呢 ?而且没有进行ispostback,就直接让他databind() ?

    这就是问题的所在,我们必须在pageload里面指定gridview的数据源(datasource),然后绑定(databind),而我们在处理RowUpdating的委托函数之前,会先执行完pageload再执行其他事件函数。因此,在执行RowUpdating对应的处理函数之前,数据已经又被复原为数据库里的初试值。

    修改这个错误的方法,很简单,把gridviewobject.DataBind()放到if(!IsPostBack) 里面
--------------------编程问答-------------------- 楼上的也不行了,我刚遇到这样的问题,以前都是用那个,datasource控件作的,不过成功了 --------------------编程问答-------------------- --------------------编程问答-------------------- 7楼正解吧
你还没更新就从新绑定,肯定还是原来的值 --------------------编程问答-------------------- 我也遇到了这个问题。用9楼的方法做了。结果发现丢失绑定值了。结果还是不能进行更新。
我是用NHibernate持久化数据库的,专门谢了一个数据处理的接口。现在是在新建的网页中测试接口运行效果。结果就遇到了上面类似的问题。郁闷啊! --------------------编程问答--------------------
引用 9 楼 易做图ns 的回复:
一个新的gridview总是需要给他指定一个datasouce,然后databind一下!他的功能很强大,但是总是会出现许多问题。

  这次讲的是gridview在使用自己的更新方法时,总是取到textbox未更新前的值。就是数据库原来的值。

  出现这种问题的朋友,你检查下是不是把databind写在了pageload里面呢 ?而且没有进行ispostback,就直接让他databi……

讲的非常好 --------------------编程问答--------------------
引用 7 楼 amandag 的回复:
protected void Page_Load(object sender, EventArgs e) 

if(!Page.IsPostBack) 

  up(); 

}

protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e) 

this.GridView……

(GridView2.Rows[e.NewEditIndex].Cells[0].Controls[0] as TextBox).Enabled = false;有什么用希望大侠指点,没有它也能够得到想要的效果,加上了反而会报错,急!!!
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,