0

UpdatePanel の GridView の PagerRow に一連の LinkBut​​tons を追加しようとしています。これらをインスタンス化して追加するために、RowCreated イベントを使用しています。私が抱えている問題は、クリック ハンドラーが 2 回目にしか起動されないことです。

を使用して 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 自体を作成するために、私は使用しています

    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)

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

4

1 に答える 1

1

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

セッション インジケーターを作成し、ポストバックで、Page Init でそのセッションを確認します。

それが条件を満たしている場合は、RowCreated イベントで再作成するのではなく、Page Init でイベントと共にコントロールを再作成します。

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

于 2011-11-08T14:20:53.010 に答える