ASPX页:
<asp:TemplateColumn HeaderText="真实姓名">
<HeaderTemplate>
<DIV align="center">真实姓名</DIV>
</HeaderTemplate>
<ItemTemplate>
<asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.TrueName") %>'>Label</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="TextBox1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.TrueName") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
代码页:
TextBox newTrueName = (TextBox)e.Item.FindControl("TrueName");为什么得到的newTrueName是默认绑定的值而不是修改之后的值呢

解决方案 »

  1.   

    没有重新绑定显示的是viewstate里面的对象,
    重新绑定才能把数据库里面的内容重新加载
      

  2.   

    如果你是在asp.net2.0(vs2005)下,要注意你学的教材是不是asp.net1.1(vs2003)的。我今天还发现有人在2.0的程序中写出1.1的代码,那当然无法正确获得提交的值。你的绑定代码必须在page_load中,也就是说不能使用 if(!IsPostback) 这样的条件语句,并且你的处理修改事件的方法中千万首先绑定数据,在
       TextBox newTrueName = (TextBox)e.Item.FindControl("TrueName");
    这行代码之前不要绑定数据。在asp.net1.1中,这样写可以,但是asp.net2.0中失效了。在page_load中正常绑定数据的做法,在asp.net1.1和2.0中都有效。如果你看到一个实例代码,业务贴代码的人也没有考虑代码适用的版本,直接就用来凑版面了。你要自己区分这两种数据绑定方式的差别。
      

  3.   

    再说一遍:对于1.1,获取值之前完全可以进行数据绑定,绑定之后依然获得更新或者新增的值。但是对于2.0,这个做法失效了,必须在page_load结束前进行绑定,之后的任何事件中的再次绑定反而会丢失更新或者新增的值,而从数据源中得到的值覆盖了提交的值。