做网页时,经常地我们要做自己的分页控件底部页码部分的样式,但是.net自己的样式太过于单调,也不容易扩展,因些,我们经常要重写pagerstyle,这样也会很麻烦的,但是,我们如果利用.NET分页功能所产生的JS脚本代码,则可以很容易地实现我们想要的效果。下面,我们将利用.net的GRIDVIEW实现一个分页显示效果:
最终效果图
实现步骤:
1.页面添加一个GRIDVIEW控件,开启分页的功能。
2.可以看到下面有生成的页码效果。
3.下一步,将页码部分隐藏。
在页面加入代码:
<PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Center" CssClass="hideMe" />
样式hideMe代码为:
.hideMe {display:none;}
4.添加自己要定义的底部页码样式,注意要在<asp:GridView 控件代码的外部添加,不要在pagerstyle里面添加,否则,原来自代的分页页码就会丢掉。
<span class="fy_text" style="width:60;">
<asp:DropDownList ID="selCount" runat="server" OnSelectedIndexChanged="selCountIndexChange" AutoPostBack="True">
<asp:ListItem Value="5" Text="5条/页"></asp:ListItem>
<asp:ListItem Value="10" Text="10条/页"></asp:ListItem>
<asp:ListItem Value="15" Text="15条/页" ></asp:ListItem>
<asp:ListItem Value="20" Text="20条/页" Selected=True></asp:ListItem>
</asp:DropDownList>
</span>
<span class="fy_text" style="width:60;">
<select id="SelIndex" name="SelIndex" οnchange="__doPostBack('GridView1',document.form1.SelIndex.value)">
<%
for (int i = 1; i <= GridView1.PageCount; i++)
{
Response.Write("<option value=\"Page$" + i.ToString() + "\" " + (GridView1.PageIndex+1 == i ? "selected" : "") + ">第 " + i.ToString() + " 页</option>");
}
%>
</select></span>
<span class="fy_text" style=" width:96; border:solid 1px #CCCCCC;">共<%=GridView1.Rows.Count%>条 /分<%=GridView1.PageCount%>页</span>
<%if (GridView1.PageIndex == 0)
{ %>
<span class="fy_text" style="width:48;border:solid 1px #CCCCCC;"><a href="#" class="syy_on">上一页</a></span>
<%}
else
{
Response.Write("<span class='fy_text' style='width:48;border:solid 1px #CCCCCC;'><a href=\"javascript:__doPostBack('GridView1','Page$"+ GridView1.PageIndex.ToString()+"')\">上一页</a></span>");
}
%>
<%
for (int i = 1; i <= GridView1.PageCount; i++)
{
if (i != GridView1.PageIndex + 1)
Response.Write("<span class='fy_text' style='width:19; border:solid 1px #CCCCCC;font-family:Arial;'><a href=\"javascript:__doPostBack('GridView1','Page$" + i.ToString() + "')\"> " + i.ToString() + " </a></span>");
else
Response.Write("<span class='fy_text' style='width:19; border:solid 1px #CCCCCC;font-family:Arial; color:red;'>" + i.ToString() + "</span>");
}
%>
<%if (GridView1.PageIndex + 1 < GridView1.PageCount)
{ %>
<span class="fy_text" style="width:48; border:solid 1px #CCCCCC;"><a href="javascript:__doPostBack('GridView1','Page$<% =GridView1.PageCount-1>GridView1.PageIndex?(GridView1.PageIndex+2).ToString():(GridView1.PageIndex+1).ToString() %>')" >下一页</a></span>
<%}
else { Response.Write("<span class='fy_text' style='width:48; border:solid 1px #CCCCCC; color:#cccccc'>下一页</span>"); }%>
这样,我们底部页码部分效果就做好了,利用控件分页自动生成的__doPostBack()函数实现页面跳转,十分方便,我们所做的无非就是做一些页码呈现的控制和实现各个控件间的协作功能。十分简单。
关键点:不要改变自带的pagerstyle,将其隐藏,这样就可以利用.net自动生成的doPostBack函数。
附上我的页面代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ManagerNews.aspx.cs" Inherits="Manager_ManagerNews" EnableEventValidation="true"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>新闻列表</title>
<link href="css/default.css" rel="stylesheet" type="text/css" />
<script>
function checkAll(obj)
{
var input=document.getElementsByTagName("input");
for(var i=0;i<input.length;i++)
{
if(input[i].type=="checkbox"&&input[i]!=obj)
{
if(input[i].checked==true)
{
input[i].checked=false;
}
else if(input[i].checked==false)
{
input[i].checked=true;
}
}
}
}
</script>
<style type="text/css">
.tr { line-height:21px; height:21px;}
.hideMe {display:none;}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="news_list">
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-bottom:15px;">
<tr>
<td class="zwln_title" width="110"><a href="NewsAdd.aspx" target="right">== 新增新闻 ==</a> </td>
<td width="520" class="zwln_title"> </td>
<td width="50" class="zwln_title"><a href="javascript:checkAll(this);">[全选]</a></td>
<td width="50" class="zwln_title">
<asp:LinkButton ID="lbtnDelete" runat="server" OnClick="lbtnDelete_Click">[删除]</asp:LinkButton>
</td>
<td width="80" class="zwln_title">新闻分类:</td>
<td width="90" class="zwln_title">
<asp:DropDownList ID="dropNewsType" runat="server" AutoPostBack="True" OnSelectedIndexChanged="dropNewsType_SelectedIndexChanged">
</asp:DropDownList>
</td>
</tr>
</table>
<asp:GridView ID="GridView1" runat="server"
CellPadding="4" ForeColor="#333333" GridLines="None" Width="100%"
AutoGenerateColumns="False" EmptyDataText="暂时没有新闻" AllowPaging="True" PageSize="20" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound">
<PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Center" CssClass="hideMe" />
<HeaderStyle CssClass="bt_title"/>
<RowStyle BackColor="#EFF3FB" CssClass="bt_title2"/>
<AlternatingRowStyle BackColor="White" />
<EmptyDataRowStyle HorizontalAlign="Center" ForeColor="#827339" />
<Columns>
<asp:TemplateField >
<ItemTemplate>
<input id="chSelect" type="checkbox" runat="server"/>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" CssClass="bt_title2"/>
</asp:TemplateField>
<asp:TemplateField HeaderText="新闻标题">
<ItemTemplate>
<%#ComDll.GetSubBString(Eval("EditTitle").ToString(), 48)%>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" CssClass='bt_title3'/>
</asp:TemplateField>
<asp:TemplateField HeaderText="权限">
<ItemTemplate>
<%#Eval("ImportSign").ToString()=="0"?"一般":"加密"%>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" CssClass='bt_title2'/>
</asp:TemplateField>
<asp:BoundField DataField="classname" HeaderText="分类" >
<ItemStyle HorizontalAlign="Center" CssClass="bt_title2"/>
</asp:BoundField>
<asp:BoundField DataField="SourceName" HeaderText="来源" >
<ItemStyle HorizontalAlign="Center" CssClass="bt_title2"/>
</asp:BoundField>
<asp:TemplateField HeaderText="信息日期">
<ItemTemplate>
<%#string.IsNullOrEmpty(Eval("DeclareDate").ToString())?"":
Convert.ToDateTime(Eval("DeclareDate")).ToString("yyyy-MM-dd") %>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" CssClass="bt_title2"/>
</asp:TemplateField>
<asp:TemplateField HeaderText="操作">
<ItemTemplate>
<a href="Modify.aspx?ID=<%#Eval("ID") %>">修改</a>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" CssClass="bt_title2"/>
</asp:TemplateField>
</Columns>
<PagerSettings PageButtonCount="1000" />
</asp:GridView>
<br />
<span class="fy_text" style="width:60;">
<asp:DropDownList ID="selCount" runat="server" OnSelectedIndexChanged="selCountIndexChange" AutoPostBack="True">
<asp:ListItem Value="5" Text="5条/页"></asp:ListItem>
<asp:ListItem Value="10" Text="10条/页"></asp:ListItem>
<asp:ListItem Value="15" Text="15条/页" ></asp:ListItem>
<asp:ListItem Value="20" Text="20条/页" Selected=True></asp:ListItem>
</asp:DropDownList>
</span>
<span class="fy_text" style="width:60;">
<select id="SelIndex" name="SelIndex" οnchange="__doPostBack('GridView1',document.form1.SelIndex.value)">
<%
for (int i = 1; i <= GridView1.PageCount; i++)
{
Response.Write("<option value=\"Page$" + i.ToString() + "\" " + (GridView1.PageIndex+1 == i ? "selected" : "") + ">第 " + i.ToString() + " 页</option>");
}
%>
</select></span>
<span class="fy_text" style=" width:96; border:solid 1px #CCCCCC;">共<%=GridView1.Rows.Count%>条 /分<%=GridView1.PageCount%>页</span>
<%if (GridView1.PageIndex == 0)
{ %>
<span class="fy_text" style="width:48;border:solid 1px #CCCCCC;"><a href="#" class="syy_on">上一页</a></span>
<%}
else
{
Response.Write("<span class='fy_text' style='width:48;border:solid 1px #CCCCCC;'><a href=\"javascript:__doPostBack('GridView1','Page$"+ GridView1.PageIndex.ToString()+"')\">上一页</a></span>");
}
%>
<%
for (int i = 1; i <= GridView1.PageCount; i++)
{
if (i != GridView1.PageIndex + 1)
Response.Write("<span class='fy_text' style='width:19; border:solid 1px #CCCCCC;font-family:Arial;'><a href=\"javascript:__doPostBack('GridView1','Page$" + i.ToString() + "')\"> " + i.ToString() + " </a></span>");
else
Response.Write("<span class='fy_text' style='width:19; border:solid 1px #CCCCCC;font-family:Arial; color:red;'>" + i.ToString() + "</span>");
}
%>
<%if (GridView1.PageIndex + 1 < GridView1.PageCount)
{ %>
<span class="fy_text" style="width:48; border:solid 1px #CCCCCC;"><a href="javascript:__doPostBack('GridView1','Page$<% =GridView1.PageCount-1>GridView1.PageIndex?(GridView1.PageIndex+2).ToString():(GridView1.PageIndex+1).ToString() %>')" >下一页</a></span>
<%}
else { Response.Write("<span class='fy_text' style='width:48; border:solid 1px #CCCCCC; color:#cccccc'>下一页</span>"); }%>
</div>
</form>
</body>
</html>