完成图:
先进入模板编辑模式,选择【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);
到这里已完成上下页和首页等的切换,下篇我们接着完成操作的功能。