2012-11-20 109 views
5

我只是测试如果在没有运气的情况下进行更新时,我会从文本框中获取已更改的值。我只是不能获得新的价值。我究竟做错了什么?我尝试了很多东西。这是最新的一个。我怎样才能获得更新的新值到我的标签?当我单击网格上的编辑并更改文本框的值并单击更新时,标签将仅显示文本框的原始值。GridView RowUpdating无法获取新值

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    GridView1.EditIndex = e.NewEditIndex; 

    bindgrid(); 
} 

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    GridViewRow row = GridView1.Rows[e.RowIndex]; 
    Label1.Text = ((TextBox)(GridView1.Rows[GridView1.EditIndex]).Cells[2].Controls[0]).Text; 

    GridView1.EditIndex = -1; 
    bindgrid(); 
} 
+0

你有没有调试代码,在Label1中获得什么值? –

+0

它在那里读取......“当我单击网格上的编辑并更改文本框的值并单击更新时,标签将只显示文本框的原始值。”因此,让我们说原来在文本框中有“测试”,然后我编辑它以“asd”,然后单击更新。 “测试”将出现在标签不“asd”,因为我想。 – Firze

+0

您必须将值保存在数据库中,并再次将网格绑定到新的数据源 –

回答

16

我认为当你推送更新链接时Gridview在获取新值之前再次绑定。您必须在GridView.DataBind()之前使用if(!IsPostBack)

+0

哦,是的,这是它。当我看到你的回复时,我立即意识到这是事实。这是在你提到它之前我甚至没有想到的那些问题之一。 – Firze

0

为什么当你已经有当前行时再次打电话GridView1.Rows[GridView1.EditIndex]?尝试使用行你已经检索

GridViewRow row = GridView1.Rows[e.RowIndex]; 
Label1.Text = ((TextBox) row.Cells[2].Controls[0]).Text; 

Read more on this

0

刚刚成立的EnableViewState属性设置为false的GridView的,你可以得到新的价值。

<asp:GridView runat="server" EnableViewState="False" ID="GridView6" AutoGenerateColumns="false" Width="100%" 
       EmptyDataText="No Record Found" AllowPaging="false" PageSize="10" OnPageIndexChanging="ChangePage" 
       OnRowCommand="RowCommand" OnRowDataBound="GridView6_RowDataBound" > 
+0

这看起来更像评论而不是答案。当你获得足够的声望时,你将能够对其他人发表评论。 –

+0

我已经修改了我的答案,看起来更像回答而不是评论。 –