下面是代码,功能除实现了页码按钮外,还对上下页及首尾页按钮的状态也进行了控制。 

<%@ 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>&nbsp;&nbsp;</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(
"&nbsp;");
}
if (pend < pc - 1) Response.Write("<span>&nbsp;&nbsp;</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]
posted on 2008-12-03 19:12  寒炫_水煮江湖  阅读(1384)  评论(0编辑  收藏  举报