minato128 blog

minato128の公開メモ帳です。

GridviewのPageIndexChangingイベントが発生しないバグ

現象

Gridviewのオプションで上下にページングリンク入れて、
最終ページから他のページのリンクをクリックするとPageIndexChangingイベントが発生しない。

対処

c# - ASP.NET 4.5 GridView: PostBack of last page - Stack Overflow
このリンク先ではGridviewを拡張して対応してるけど、
そもそもGridviewにページングがくっついてること自体よくないから、
AspNetPagerというページングコントロールを使うことにした。
AspNetPager - Home
こんなに要らないってくらいオプションが豊富。(上記リンクのデモ参照)
indexが1から始まることを除けばすごくいい。
CloneFromで簡単に複製もできるから実装はひとつ分だけでよく、修正(差替)は簡単だった。
PagingButtonLayoutTypeでulタグでの生成に変更できるからBootstrapがそのまま使える。

サンプル

<webdiyer:AspNetPager ID="pagerTop" runat="server" CssClass="pagination" PageSize="20"></webdiyer:AspNetPager>
<webdiyer:AspNetPager ID="pagerBottom" runat="server" CloneFrom="pagerTop"></webdiyer:AspNetPager>
pager.PagingButtonLayoutType = PagingButtonLayoutType.UnorderedList
pager.CurrentPageButtonPosition = PagingButtonPosition.Center
pager.CurrentPageButtonClass = "selected"
pager.NextPageText = "Next"
pager.PrevPageText = "Prev"
pager.AlwaysShow = True
pager.ShowMoreButtons = False
pager.ShowCustomInfoSection = ShowCustomInfoSection.Never
pager.ShowPageIndexBox = ShowPageIndexBox.Never
pager.PagingButtonSpacing = 0

環境

ASP.NET Web Forms 4.5
Windows7, VS2012