2011-11-08 13 views
0

私は、UpdatePanelのGridViewのPagerRowに一連のLinkBut​​tonを追加しようとしています。 RowCreatedイベントを使用してこれらをインスタンス化して追加しています。私が持っている問題は、クリックハンドラは2回目だけであるということです。ポストバックの動的コントロール

私は、私が

Dim lnkSize = New LinkButton() With { _, 
     .Text = size.ToString(), _ 
     .CommandArgument = size.ToString(), _ 
     .ID = "pageSizer" & size 
    } 
    AddHandler lnkSize.Click, AddressOf lnkPageSize_Click ' an EventHandler which just changes pagesize based on CommandArgument 
    liSize.Controls.Add(lnkSize) 

GridViewPageSizer継承HtmlGenericControlを使用していLinkBut​​tons自分自身を作成するには

Protected Sub grd_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) 
    If (e.Row.RowType = DataControlRowType.Pager) Then 
     Dim pageSizer = New GridViewPageSizer(grdItems) 
     e.Row.Cells(0).Controls.AddAt(0, pageSizer) 
    End If 
End Sub 

を使用してLinkBut​​tonsを作成し、各ボタンのクリックのイベントハンドラを追加します。すべてのポストバックでページャの行が再作成されるので、古いボタンは新しいセットに置き換えられ、イベントハンドラは2回目のクリックでのみ起動されます。 IsPostBackをチェックすると、最初のクリック後にボタンが消えます。ボタンをクリックしてページサイズを変更した後にグリッドを再バインドしてみましたが、同じことが起こります。これを回避する方法はありますか?

答えて

1

EventHandlerが正しくトリガーするためには、ページInit/PreInitにバインドする必要があります。

セッションインジケータを作成し、ポストバック時にそのセッションがページInitであることを確認します。

条件を満たす場合は、RowCreatedイベントで再作成するのではなく、Page Initイベントと一緒にコントロールを再作成してください。

今回は、イベントが正しくトリガーされます。

+0

Page_Initのコントロールにアクセスできないため、問題があります。それらはUserControlにあり、UserControlがPage_Initの後のDataBoundになるまでBottomPagerRowはありません。 – Echilon

関連する問題