天天看點

使用AspNetPager與GridView完成分頁

由于GridView的分頁功能實在是太弱了,是以需要使用強大的AspNetPager來作為分頁控件。最簡單的辦法就是GridView控件下面接着放一個AspNetPager控件,但是這樣好像就不能用GridView的分頁功能了。在資料量不大的情況下,使用GridView的分頁是十分友善有效的。另外還有一個問題就是分頁控件在GridView生成的表格的下面,而沒有像GridView自帶分頁那樣包含到表格内部,這點也不是很爽。

要解決以上的問題,可以将AspNetPager放入GridView的分頁模闆(PagerTemplate)中,如下代碼所示:

<a></a>

&lt;asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="True"&gt;

    &lt;Columns&gt;

        &lt;asp:BoundField DataField="DmId" HeaderText="序号" ReadOnly="True" SortExpression="DMID" /&gt;

        ……

    &lt;/Columns&gt;

    &lt;PagerStyle HorizontalAlign="Center" /&gt;

    &lt;PagerTemplate&gt;

        &lt;asp:AspNetPager ID="AspNetPager1" runat="server" ShowBoxThreshold="5" ShowPageIndexBox="Auto" CenterCurrentPageButton="True"&gt;

        &lt;/asp:AspNetPager&gt;

    &lt;/PagerTemplate&gt;

&lt;/asp:GridView&gt; 

但是這樣做要解決幾個問題:

(1)這個GridView每一頁的行數AspNetPager并不知道。解決辦法:為AspNetPager添加屬性PageSize="&lt;%# ((GridView)Container.NamingContainer).PageSize%&gt;"

(2)這個GridView綁定的總記錄數AspNetPager也不知道。解決辦法:為AspNetPager添加屬性RecordCount="&lt;%#((IList)(((GridView)Container.NamingContainer).DataSource)).Count %&gt;"

(3)這個GridView目前在第幾頁AspNetPager也不知道。這個問題的解決可不像前面那麼簡單了,通過設定屬性CurrentPageIndex的方式AspNetPager根本不認!(估計是AspNetPager的一個Bug吧)要解決這個問題就隻有在每次翻頁時背景代碼中為AspNetPager設定CurrentPageIndex屬性。

(4)使用AspNetPager後GridView并不會觸發PageChanging事件。但是要觸發AspNetPager的PageChanging事件,是以可以為分頁模闆中的AspNetPager控件添加事件處理:OnPageChanging="AspNetPager1_PageChanging",對應的就是分頁的背景代碼:

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個問題。

OK,以上4個問題都解決了,我們的GridView+AspNetPager的分頁就完成了!另外如果覺得AspNetPager的樣式不好看可以再定義一下CSS。最後完整的代碼是:

&lt;PagerStyle CssClass="GridViewPager" HorizontalAlign="Center" /&gt;

        &lt;asp:AspNetPager ID="AspNetPager1" runat="server" ShowBoxThreshold="5" ShowPageIndexBox="Auto"

        PageSize="&lt;%# ((GridView)Container.NamingContainer).PageSize%&gt;" OnPageChanging="AspNetPager1_PageChanging"

        RecordCount="&lt;%#((IList)(((GridView)Container.NamingContainer).DataSource)).Count %&gt;"

        CenterCurrentPageButton="True"&gt;

&lt;/asp:GridView&gt;

//以下是背景代碼

    this.GridView1.PageIndex = e.NewPageIndex - 1;

    Bind();

    pager.CurrentPageIndex = e.NewPageIndex;

繼續閱讀