従来のシナリオ:ユーザーの入力を受け取り、検索結果を取得してページに表示します。 First、Next、Previousなどのボタンを表示する必要があります。ユーザーの現在のページをviewstateで管理しています。すべてが良いです、うまく動作します。検索結果にクリック可能なページ番号を実装する
次に、クリック可能なページ番号を実装する必要があります。 1-2-3-4-5-6など
レンダリングは簡単です。私は実行時にlinkbuttonコントロールを生成し、ページ番号の付いたコマンド引数を追加してハンドラを追加するので、クリックが処理されます。次に、プレースホルダーに追加し、期待どおりに表示されます。
しかし、もし私がまだ剃った頭を持っていなかったら、私はいつも期待通りに私の髪を引っ張り出すだろう。
どのようにすればいいですか?ページングリンクボタンが呼び出されると、私のイベントは常に接続され、起動できますか?
以下はコードの重要な部分ですが、私がやっていることを理解しやすくするための擬似コードです。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Search()
End If
End Sub
Sub Search
'Misc databinding stuff, searches and displays results for the page specified in Me.CurrentPage
RenderPagingControls()
End Sub
Sub RenderPagingControls
'loop throug pagenumbers, Build a linkbutton control, add it to a placeholder
AddHandler lbn.Click, AddressOf lbnNumber_Click
lblPageNumbers.Controls.Add(lbn)
...
End Sub
Protected Sub lbnNumber_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim b As LinkButton = CType(sender, LinkButton)
Me.CurrentPage = CInt(b.CommandArgument)
Search()
End Sub
Public Property CurrentPage() As Integer
Get
Dim o As Object = Me.ViewState("CurrentPage")
If o Is Nothing Then
Return 1
Else
Return CType(o, Integer)
End If
End Get
Set(ByVal value As Integer)
Me.ViewState("CurrentPage") = value
End Set
End Property
Protected Sub lbnNumber_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim b As LinkButton = CType(sender, LinkButton)
Me.CurrentPage = CInt(b.CommandArgument)
Search()
End Sub
@Kjensenは - 私は、リピータを使用して私の答えで代替を追加しました。あなたはそれをチェックするかもしれません。 – Keltex