【问题标题】:Gridview losing modified Column HeaderTextsGridview 丢失修改后的 Column HeaderTexts
【发布时间】:2016-04-18 11:44:20
【问题描述】:

我正在尝试动态修改所有 gridviews 列 HeaderText,但我一直遇到一些 gridviews 的问题。我正在使用母版页修改Page.PreRenderComplete 页面中的所有 GridView,我注意到即使在更改 HeaderText 之后,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 或 Gridviews Databound 事件之后运行?

【问题讨论】:

  • 当我试图重现问题时,我遇到了一个有趣的情况:DataBound 事件被反复调用,直到我得到一个stackoverflow。但是,如果我在 GridView 的 PreRender 事件中移动代码,一切正常(除了使用上面的代码,每次回发时都会扩展标题文本)。
  • 我在 GridViews PreRender 事件中放置了相同的代码,页面仍然加载了原始 HeaderTexts。

标签: asp.net gridview


【解决方案1】:

试试这个,覆盖页面的渲染函数,而不是 MasterPage

  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

【讨论】:

  • 我实际上尝试过覆盖渲染。这些值在MyBase.Render(writer) 之前设置并在MyBase.Render(writer) 之后维护,但仍然没有显示在页面上。
  • Render 是在将其发送到浏览器之前您可以进行更改的最后一个位置。因为这发生在保存状态之后,所以需要在每次回发期间调用它。如果您正在更改标题文本并且它没有出现,我想知道您是否正在修改正确的行。 IIRC 你需要修改gv.HeaderRow
  • 在查看您的原始代码时,您正在使用 gv.DataBound 事件。您也应该在那里使用 gv.HeaderRow 。但是,DataBound 事件可能并不总是在页面生命周期中被调用,因此您最好在 gv.prerender 或 page.render 或 page.prerendercomplete 中执行此操作。这些总是被调用
  • 我实际上只是在那里测试它,因为我知道它会被击中。一旦我弄清楚如何让它工作,计划就是让它在 Page.PreRenderComplete 中发生。 HeaderRow 和 Columns(i).HeaderText 有功能上的区别吗?
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多