天天看點

使用AspNetPager與GridView完成分頁

由于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;

} `