下面是代码,功能除实现了页码按钮外,还对上下页及首尾页按钮的状态也进行了控制。
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string pageno = (string)Request.QueryString["pageno"];
string pagecount = (string)Request.QueryString["pagecount"];
if (!string.IsNullOrEmpty(pageno) && !string.IsNullOrEmpty(pagecount))
pageChanging(grvPage, Int32.Parse(pageno) - 1, Int32.Parse(pagecount));
else
InitializeData();
}
}
private void InitializeData()
{ //这里是数据绑定的代码
System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add("NO", typeof(string));
dt.Columns.Add("Columns1", typeof(string));
dt.Columns.Add("Columns2", typeof(string));
for (int i = 0; i < 56; i++)
dt.Rows.Add("no" + i, "data1" + i, "data2" + i);
grvPage.DataSource = dt;
grvPage.DataBind();
}
protected void grvPage_PageIndexChanging(object sender, GridViewPageEventArgs e)
{ //点击分页功能的事件
GridView theGrid = sender as GridView;
pageChanging(theGrid, e.NewPageIndex, theGrid.PageCount);
}
private void pageChanging(GridView gv, int pn, int pc)
{ //分页-当前页号设定
int newPageIndex = pn;
newPageIndex = newPageIndex >= pc ? pc - 1 : newPageIndex;
newPageIndex = newPageIndex < 0 ? 0 : newPageIndex;
gv.PageIndex = newPageIndex;
InitializeData();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>自定义GridView分页模板中页码Button的实现</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="grvPage" runat="server" Font-Size="12px"
AllowPaging="True" EmptyDataText="没有读卡器数据!" PageSize="5"
OnPageIndexChanging="grvPage_PageIndexChanging">
<HeaderStyle BackColor="#C1D2FB" Font-Bold="True" ForeColor="Black" Height="20px" HorizontalAlign="Center" />
<RowStyle BackColor="#EFF3FB" ForeColor="#4A3C8C" Font-Size="12px" Height="20px" />
<AlternatingRowStyle BackColor="#EFF3FB" Font-Size="12px" Height="20px" />
<PagerSettings PageButtonCount="6" />
<PagerTemplate>
<table width="100%">
<tr>
<td style="text-align: right">
第<asp:Label ID="lblPageIndex" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>' />页
共/<asp:Label ID="lblPageCount" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageCount %>' />页
<% //首页/上一页 %>
<% if (this.grvPage.PageIndex <= 0)
{ %>
<asp:LinkButton runat="server" Enabled="false" Text="首页" />
<asp:LinkButton runat="server" Enabled="false" Text="上一页" />
<% }
else
{ %>
<asp:LinkButton runat="server" CausesValidation="False" CommandArgument="First" CommandName="Page" Text="首页" />
<asp:LinkButton runat="server" CausesValidation="False" CommandArgument="Prev" CommandName="Page" Text="上一页" />
<% } %>
<% //页码页 %>
<%
int pbc = this.grvPage.PagerSettings.PageButtonCount;
int pi = this.grvPage.PageIndex;
int pc = this.grvPage.PageCount;
int pstar = 0;
int pend = pc - 1;
if (pbc > 0 && pbc < pc)
{
int ps = pbc / 2;
pstar = (pi > ps) ? ((pi + pbc - ps > pc) ? pc - pbc : pi - ps) : 0;
pend = pstar + pbc - 1;
}
if (pstar > 0) Response.Write("<span> </span>");
for (int i = pstar; i <= pend; i++)
{
int pageno = i + 1;
if (i == pi)
Response.Write("<span style='background-color:Blue; color:#ffffff'>" + pageno + "</span>");
else
Response.Write("<a href='pageNO.aspx?pageno=" + pageno + "&pagecount=" + pc + "'>" + pageno + "</a>");
Response.Write(" ");
}
if (pend < pc - 1) Response.Write("<span> </span>");
%>
<% //下一页/尾页 %>
<% if (this.grvPage.PageIndex >= grvPage.PageCount - 1)
{ %>
<asp:LinkButton runat="server" Enabled="false" Text="下一页" />
<asp:LinkButton runat="server" Enabled="false" Text="尾页" />
<% }
else
{ %>
<asp:LinkButton runat="server" CausesValidation="False" CommandArgument="Next" CommandName="Page" Text="下一页" />
<asp:LinkButton runat="server" CausesValidation="False" CommandArgument="Last" CommandName="Page" Text="尾页" />
<% } %>
</td>
</tr>
</table>
</PagerTemplate>
</asp:GridView>
</div>
</form>
</body>
</html>
首先,要将AllowPaging="True"设置,然后设置PageButtonCount和PageSize这样才能控制Button的个数(默认是10)。代码
Response.Write("<a href='pageNO.aspx?pageno=" + pageno + "&pagecount=" + pc + "'>" + pageno + "</a>");中的'pageNO.aspx是当前页面名。还要注意的是grvPage是GridView的ID。
本人是初学ASP.net,有什么更好的方法,希望大家可以提出。
原代码:
pageNO.rar
-------------------------------------------------------------------
哦,发现了一个小BUG,多出一个页的按钮来。呵呵,程序已经修正。
不过程序我已经改进过了,解决了两个问题,一个数据行是不满一页时添加空行,另一个是总数据行都不满一页时分页功能行被隐藏的问题。大家可以到下面的文章中了解一下。
[
1] [2]