由于GridView的分頁功能實在是太弱了,是以需要使用強大的AspNetPager來作為分頁控件。最簡單的辦法就是GridView控件下面接着放一個AspNetPager控件,但是這樣好像就不能用GridView的分頁功能了。在資料量不大的情況下,使用GridView的分頁是十分友善有效的。另外還有一個問題就是分頁控件在GridView生成的表格的下面,而沒有像GridView自帶分頁那樣包含到表格内部,這點也不是很爽。
要解決以上的問題,可以将AspNetPager放入GridView的分頁模闆(PagerTemplate)中,如下代碼所示:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="True">
<Columns>
<asp:BoundField DataField="DmId" HeaderText="序号" ReadOnly="True" SortExpression="DMID" />
……
</Columns>
<PagerStyle HorizontalAlign="Center" />
<PagerTemplate>
<asp:AspNetPager ID="AspNetPager1" runat="server" ShowBoxThreshold="5" ShowPageIndexBox="Auto" CenterCurrentPageButton="True">
</asp:AspNetPager>
</PagerTemplate>
</asp:GridView>
但是這樣做要解決幾個問題:
(1)這個GridView每一頁的行數AspNetPager并不知道。解決辦法:為AspNetPager添加屬性PageSize="<%# ((GridView)Container.NamingContainer).PageSize%>"
(2)這個GridView綁定的總記錄數AspNetPager也不知道。解決辦法:為AspNetPager添加屬性RecordCount="<%#((IList)(((GridView)Container.NamingContainer).DataSource)).Count %>"
(3)這個GridView目前在第幾頁AspNetPager也不知道。這個問題的解決可不像前面那麼簡單了,通過設定屬性CurrentPageIndex的方式AspNetPager根本不認!(估計是AspNetPager的一個Bug吧)要解決這個問題就隻有在每次翻頁時背景代碼中為AspNetPager設定CurrentPageIndex屬性。
protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex - 1;//這兒需要注意,AspNetPager中的PageIndex是從1開始的,而GridView的是從0開始的,是以要減1.
Bind();//GridView的資料綁定方法
Wuqi.Webdiyer.AspNetPager pager = this.GridView1.BottomPagerRow.FindControl("AspNetPager1") as Wuqi.Webdiyer.AspNetPager;
pager.CurrentPageIndex = e.NewPageIndex;//這裡就是為了解決前面的第3個問題。
}
<PagerStyle CssClass="GridViewPager" HorizontalAlign="Center" />
<asp:AspNetPager ID="AspNetPager1" runat="server" ShowBoxThreshold="5" ShowPageIndexBox="Auto"
PageSize="<%# ((GridView)Container.NamingContainer).PageSize%>" OnPageChanging="AspNetPager1_PageChanging"
RecordCount="<%#((IList)(((GridView)Container.NamingContainer).DataSource)).Count %>"
CenterCurrentPageButton="True">
</asp:GridView>
//以下是背景代碼
this.GridView1.PageIndex = e.NewPageIndex - 1;
Bind();
pager.CurrentPageIndex = e.NewPageIndex;
} `