2016-04-18 3 views
0

すべてのgridviews列HeaderTextを動的に変更しようとしていますが、一部のGridviewで問題が発生しています。私はmasterページを使ってページ内のすべてのGridViewをPage.PreRenderCompleteに変更していましたが、HeaderTextを変更した後でも、ロード時に古いテキストが表示されていました。私は列の上にループし、次のコードを使用して、特定のページ上のDataBoundイベントである特定のGridViewののHeaderTextを変更し、デバッグするにはGridviewが変更されたColumn HeaderTextsを失う

...

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 

ページをステップ実行しながら、私はこれを見ることができますヘッダーテキストを更新します。ページの読み込みを続行すると、ヘッダーテキストが表示されたように見えます。

何が起こる可能性がありますか? PreRenderComplete以降、またはGridviews Databoundイベントの後に実行できるイベントはありますか?私は、問題を再現しようとすると

+0

にページのためのレンダリング機能をオーバーライドし、この試してみて: 'DataBound'イベントがするまで繰り返し呼び出され私は 'stackoverflow'を取得します。 GridViewの 'PreRender'イベントでコードを移動すると、すべてがうまくいきます(上記のコードを使用すると、すべてのポストバックでヘッダーテキストが展開されます)。 – ConnorsFan

+0

GridViews PreRenderイベントに同じコードを配置し、ページに元のHeaderTextsがまだロードされています。 – Marie

答えて

0

私は面白い状況に遭遇し、ではなく、マスターページ

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 
+0

実際にレンダーをオーバーライドしようとしました。値は 'MyBase.Render(writer)'の前に設定され、 'MyBase.Render(writer)'の後に保持されますが、まだページに表示されませんでした。 – Marie

+0

レンダリングは、ブラウザに送信される前に最後に変更できる場所です。これは、状態が保存された後に発生するため、すべてのポストバック中に呼び出される必要があります。ヘッダーテキストを変更しても表示されない場合は、正しい行を変更しているかどうか疑問に思う必要があります。 IIRCでは 'gv.HeaderRow' – fnostro

+0

も元のコードを見て変更する必要があり、gv.DataBoundイベントを使用しています。そこにもgv.HeaderRowを使用する必要があります。ただし、DataBoundイベントがページライフサイクル中に呼び出されるとは限りません。したがって、gv.prerenderまたはpage.renderまたはpage.prerendercompleteでこれを行う方が良い場合があります。これらはすべて常に呼び出されます – fnostro

関連する問題