Asp.net中在GridView数据绑定事件中改变显示内容要注意的问题

今天No.5说他的用Template实现的GridView在数据绑定事件中改变显示的内容后,再刷新页面时,改变的值就没了。

前台画面的片断:

  1. <ItemTemplate>
  2.     <asp:Label ID="Label1" runat="server" Text='<%# Bind("PAYMENT_CD") %>'>asp:Label>
  3. ItemTemplate>

数据绑定事件:

  1. protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  2. {
  3.     if (e.Row.RowType == DataControlRowType.DataRow)
  4.     {
  5.         e.Row.Cells[0].Text = "哈哈哈";
  6.     }
  7. }

生成的html代码为:

  1. <td>哈哈哈td>

稍微修改了一下之后,再刷新就不会丢值了,如下:

  1. protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  2. {
  3.     if (e.Row.RowType == DataControlRowType.DataRow)
  4.     {
  5.         Label lb1 = e.Row.FindControl("Label1"as Label;
  6.         lb1.Text = "哈哈哈";
  7.     }
  8. }

生成的html代码为:

  1. <td><span id="GridView1_ctl02_Label1">哈哈哈span>td>

如果把前台代码修改一下就会和以前一样变得不好用了:

  1. <ItemTemplate>
  2.     <asp:Label ID="Label1" runat="server" Text='<%# Bind("PAYMENT_CD") %' EnableViewState="False">asp:Label>
  3. ItemTemplate>

总结:
可见,Label中的值之所以在页面刷新时还能保持,是因为ViewState的功能,如果单纯设置e.Row.Cells[0].Text的值,仅仅只是设置在中,而只有设置在Label上,才能保持在ViewState中,当然要让Label的EnableViewState属性为True才可以。

你可能感兴趣的:(C#,Asp.net)