GridView数据库分页+自定义分页导航(二):自定义分页导航。首页、上一页、下一页、尾页和跳转

完成图:

   

 先进入模板编辑模式,选择【PagerTemplate】,添加自己所需的导航控件

    列入这样的,上一页和下一页和GO使用【LinkButton】,也可使用其他的控件,【注:LinkButton 在编译后是HTML的a标签】,


    或是复制下面代码,到GridView的 </Columns>后面,这个代码里有第一页和最后一页禁用的出来,

  <PagerTemplate>
                当前第:
                <asp:Label ID="pageNumber" runat="server" Text="1"></asp:Label>
                页/共:
                <asp:Label ID="totalNumber" runat="server" Text="1"></asp:Label>
                页
                <asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page" >首页</asp:LinkButton>
                <asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev" CommandName="Page"  enabled="<%#PageIndex>1 %>">上一页</asp:LinkButton>
                <asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page"  enabled="<%#PageIndex<PageCount%>">下一页</asp:LinkButton>
                <asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page" >尾页</asp:LinkButton>
                转到第
                 
                    <asp:DropDownList ID="pageList" runat="server" style="color:black">
                    </asp:DropDownList>
                    页
                <asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-3" 
                    CommandName="Page" Text="GO"/>
            </PagerTemplate>    

    这样做后,还不行,退出编辑,让他显示整个GridView后,选择它,在右下角,更改如下两个值,【AllowCustomPaging】【AllowPaging】,



    当做完这些,它还不会显示你刚刚所做的这些,甚至打开浏览器调试都看不到,

    这里有一句代码,在viewDate()方法里加上就可以显示了,每次绑定数据后,让底部我们设置的东西显示出来。

 codeTable.BottomPagerRow.Visible = true;

 到这部结果为

 这里的页数使用ViewState[]存储,因为,在点击控件后,会进行一个提交,控件默认submit的,提交后的变量值都会被清空,而ViewState可以存储我们的变量值。

/// <summary>
        /// 总页数
        /// </summary>
        protected int PageCount
        {
            get { return (int)ViewState["PageCount"]; }
            set { ViewState["PageCount"] = value ; }
        }
        /// <summary>
        /// 当前页索引
        /// </summary>
        protected int PageIndex
        {
            get { return (int)ViewState["PageIndex"]; }
            set { ViewState["PageIndex"] =value; }
        }   

       这样使用get和set,可以省去后续的很多代码,还会是代码看起来更简洁。 

       现在,我们试着将上一页和下一页的功能完善,在首页和上下页等控件上加上:onClick="Page_OnClick"(这里一定要加),然后CommandArgument="Next",在Page_OnClick事件中,我们来判断CommandArgument的值,PageIndex是当前页面,PageCount是总页码,当点击页面上的上一页或下一页,就会进入这个方法,然后页面加或减,再绑定数据,

  protected void Page_OnClick(object sender, EventArgs e)
        {
            LinkButton btn = sender as LinkButton;
            string commandName = btn.CommandArgument.ToString().ToLower();
            switch (commandName)
            {
                case "next":
                    ++PageIndex;
                    break;
                case "prev":
                    --PageIndex;
                    break;
                case "first":
                    PageIndex = 1;
                    break;
                case "last":
                    PageIndex = PageCount;
                    break;
               case "-3":
                    int p = Convert.ToInt32(((DropDownList)codeTable.BottomPagerRow.FindControl("pageList")).SelectedValue);
                    PageIndex = p;
                    break;
            }
            viewData();
        }

   我们在点击控件后,页面提交跳转,要从新绑定数据,然后在绑定的同时要讲页码等信息更改。在viewDate()方法最后添加下面两句。

 ((Label)codeTable.BottomPagerRow.FindControl("pageNumber")).Text = PageIndex + "";
            ((Label)codeTable.BottomPagerRow.FindControl("totalNumber")).Text = PageCount + "";

    

首页和最后一页是第一页,和最大数据页数,最后我们再做一个跳转页面的,需要一个dropdownList,和一个linkButton,页数的集合,这里我们有两种处理

一是在viewData里添加,二是在GridView的DataBound方法里添加,两个的作用差不多,viewData是我们自己绑定数据,只要加载最后,是可以完成的,这里我们使用第二种DataBound方法,它是在GridView数据全部绑定完成后自动执行的一个方法,


 protected void codeTable_DataBound(object sender, EventArgs e)
        {
            ((DropDownList)codeTable.BottomPagerRow.FindControl("pageList")).Items.Clear();
            for (int i = 1; i <= PageCount; i++)
                ((DropDownList)codeTable.BottomPagerRow.FindControl("pageList")).Items.Add(new ListItem(i + "", i + ""));
        }

    不要忘了,在添加时要清空之前的添加的子项。

    然后就是跳转,我们要获取到下拉框选中的值,然后进行跳转,这句的作用是找到GridView的底部的Pager行,并在这行中找到“pageLIst”这个控件,再获取他的值,我只有用这句才能获取到值,如果大家有其他方式获取到,可以忽略。完整的代码见上面Page_OnClick方法。其第一页和最后一页的禁用控制我是写在页面上的,可以看上面有。

int p = Convert.ToInt32(((DropDownList)codeTable.BottomPagerRow.FindControl("pageList")).SelectedValue);

到这里已完成上下页和首页等的切换,下篇我们接着完成操作的功能。



    

猜你喜欢

转载自blog.csdn.net/qq_28911061/article/details/81022142