Asp.net Gridview丢失修改的列标题文本

Asp.net Gridview丢失修改的列标题文本,asp.net,gridview,Asp.net,Gridview,我正在尝试动态修改所有GridView列HeaderText,但我一直遇到一些GridView问题。我正在使用母版页修改page.PreRenderComplete页面中的所有gridview,我注意到即使在更改标题文本后,gridview在加载时仍显示旧文本 为了调试,我在列上循环,并使用以下代码在特定页面上的DataBound事件中修改了一个特定Gridview的HeaderText Private Sub gv_DataBound(sender As Object, e As EventA

我正在尝试动态修改所有GridView列HeaderText,但我一直遇到一些GridView问题。我正在使用母版页修改
page.PreRenderComplete
页面中的所有gridview,我注意到即使在更改标题文本后,gridview在加载时仍显示旧文本

为了调试,我在列上循环,并使用以下代码在特定页面上的
DataBound
事件中修改了一个特定Gridview的HeaderText

Private Sub gv_DataBound(sender As Object, e As EventArgs) Handles gv.DataBound
    For Each col As DataControlField In gv.Columns
        col.HeaderText += "_SOMESTRING"
    Next
End Sub
在浏览页面时,我可以看到它正在运行,标题文本正在更新。当我继续页面加载并显示GridView时,标题文本显然已恢复


什么会导致这种情况发生?是否有一些事件可以在
PreRenderComplete
或GridView
Databound
事件之后运行?

尝试一下,覆盖页面的呈现功能,而不是母版页

  Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
    //Call function or write code that alters your gridview here
    MyBase.Render(writer)
  End Sub

当我试图重现这个问题时,我遇到了一个有趣的情况:
DataBound
事件被反复调用,直到我得到一个
stackoverflow
。但是,如果我在GridView的
PreRender
事件中移动代码,一切都会正常工作(除了使用上面的代码,每次回发时标题文本都会展开)。我在GridViews PreRender事件中放置了相同的代码,页面仍然加载了原始标题文本。我实际上尝试了覆盖Render。这些值是在
MyBase.Render(writer)
之前设置的,并在
MyBase.Render(writer)
之后维护,但仍然没有显示在页面上。在将其发送到浏览器之前,Render是最后一个可以进行更改的位置。因为这是在保存状态之后发生的,所以需要在每次回发期间调用它。如果您正在修改标题文本,但它没有出现,我想知道您是否在修改正确的行。IIRC您需要修改
gv.HeaderRow
此外,在查看原始代码时,您正在使用gv.DataBound事件。你也应该使用gv.HeaderRow。但是,在页面生命周期中可能并不总是调用数据绑定事件,因此最好在gv.prerender或page.render或page.prerendercomplete中执行此操作。这些都是经常被调用的,实际上我只是在那里测试它,因为我知道它会被击中。一旦我弄清楚如何让它工作,计划就是在Page.PreRenderComplete中实现它。HeaderRow和Columns(i)之间是否存在功能差异。HeaderText?是:vs