ASP.NET - 分页
效果:

SQL-存储过程(Paging):
- ROW_NUMBER() over(order by MessageDateTime desc) 其中的 MessageDateTime desc 代表的是按照时间,倒序排列。
USE [DB_Message]
GO
/****** Object: StoredProcedure [dbo].[Paging] Script Date: 2015/9/3 11:53:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: HF_Ultrastrong
-- Create date: 2015-8-28 19:31:59
-- Description: 分页
-- =============================================
ALTER PROCEDURE [dbo].[Paging]
@DisplayCountPage int,
@CurrentPage int
AS
BEGIN
declare @StartPage int
declare @EndPage int
set @StartPage=(@CurrentPage-1)*@DisplayCountPage
set @EndPage=@CurrentPage*@DisplayCountPage
select * from
(select ROW_NUMBER() over(order by MessageDateTime desc) as rownum, MessageID, MessageName, MessageIP, MessageContent, MessageDateTime, MessageHeadImage from Tb_Message) as a
where a.rownum > @StartPage and a.rownum <= @EndPage
END
前端代码:
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Score</th>
</tr>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr>
<td>
<%#Eval("ID") %>
</td>
<td>
<%#Eval("Name") %>
</td>
<td>
<%#Eval("Score") %>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<asp:HyperLink ID="HyperLink1" runat="server">HyperLink</asp:HyperLink>
</div>
</form>
</body>
后端代码:
protected void Page_Load(object sender, EventArgs e)
{
// 当前页,默认加载时,当前页为1
int CurrentPage = 1; // 每一页显示数据量
int DisplayCountPage = 5; // 总记录数
int TotalPage = Convert.ToInt32(SQLHelper.ExcuteScalar("select Count(*) from Tb_Message", CommandType.Text)); if (TotalPage < DisplayCountPage)
{
this.HyperLink1.Visible = false;
} //判断是否传递参数
if (Request.QueryString["page"] != null)
{
if ((!IsNumber(Request.QueryString["page"].ToString())) || Convert.ToInt32(Request.QueryString["page"].ToString()) > TotalPage)
{
Response.Write("<script>alert('页码不正确!');history.back()</script>");
}
else
{
CurrentPage = Convert.ToInt32(Request.QueryString["page"].ToString());
}
} //参数化数据
SqlParameter[] paras = new SqlParameter[]
{
new SqlParameter("@DisplayCountPage", DisplayCountPage),
new SqlParameter("@CurrentPage", CurrentPage),
}; //绑定数据
this.Repeater1.DataSource = SQLHelper.ExecuteTable("Paging", paras, CommandType.StoredProcedure);
this.Repeater1.DataBind(); //显示上下页按钮
this.HyperLink1.Text = get_pagenation(DisplayCountPage, TotalPage, CurrentPage, "Message.aspx?page={0}", "_top");
} //==========================================分页类=======================================//
#region 分页内容
/// <summary>
/// 分页内容
/// </summary>
/// <param name="size">页面大小</param>
/// <param name="count">页面数量</param>
/// <param name="currendIndex">当前页</param>
/// <param name="pattern">url模式:demo.aspx?page={0}</param>
/// <param name="target">窗口模式</param>
/// <returns></returns>
public static string get_pagenation(int size, int count, int currendIndex, string pattern, string target)
{
//1>打开窗口目标
target = string.IsNullOrEmpty(target) ? "_top" : target;
//2>总页数
int pageCount = count / size;
pageCount = pageCount * size == count ? pageCount : pageCount + 1;
//3>分页内容
StringBuilder strHtml = new StringBuilder();
strHtml.Append("<span class='pagenation'>"); #region 首部处理
if (currendIndex > 1)
{
strHtml.AppendFormat("<a href='Message.aspx?page=1' target='{0}'>[首页]</a>", target);
strHtml.AppendFormat("<a href='{0}' target='{1}'>[上一页]</a>", string.Format(pattern, currendIndex - 1), target);
}
else
{
strHtml.Append("<span class='disabled'>[首页]</span> <span class='disabled'>[上一页]</span>");
}
#endregion #region 中间部分
int i = 1; int right = (currendIndex + 4) > pageCount ? pageCount : currendIndex + 4;
if (currendIndex > 6)
{
i = currendIndex - 5;
}
else
{
right = pageCount >= 10 ? 10 : pageCount;
}
for (; i <= right; i++)
{
if (i == currendIndex)
{
strHtml.AppendFormat("<font class='current'>{0}</font>", i);
strHtml.AppendLine();
continue;
}
strHtml.AppendFormat("<a href='{0}' target='{1}'>[{2}]</a>", string.Format(pattern, i), target, i);
strHtml.AppendLine();
}
#endregion #region 尾部处理
if (currendIndex == pageCount)
{
strHtml.Append("<span class='disabled'>[下一页]</span><span class='disabled'>[末页]</span>");
strHtml.AppendFormat("总共({0})页", pageCount);
}
else
{
strHtml.AppendFormat("<a href='{0}' target='{1}'>[下一页]</a>", string.Format(pattern, currendIndex + 1), target);
strHtml.AppendFormat("<a href='{0}' target='{1}'>[末页]</a>", string.Format(pattern, pageCount), target);
strHtml.AppendFormat(" <label>总共({0})页</label>", pageCount);
}
#endregion strHtml.Append("</span>"); return strHtml.ToString();
}
#endregion
//======================================================================================// #region 判断是否为数字
/// <summary>
/// 判断是否为数字
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public bool IsNumber(string value)
{
Regex r = new Regex(@"^\d+(\.)?\d*$");
if (r.IsMatch(value))
return true;
else
return false;
}
#endregion
================================================================================
最终效果:

前端代码:
<%@ Page Title="" Language="C#" MasterPageFile="~/Manager/Manager.Master" AutoEventWireup="true" CodeBehind="DisplayBookInfo.aspx.cs" Inherits="Shop.Manager.WebForm4" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div class="config-items">
<div class="config-title">
<h1><i class="icon-font"></i>添加图书分类</h1>
</div>
<div class="result-content">
<table class="result-tab" style="width: 100%">
<tr>
<th>图书编号</th>
<th>图书名称</th>
<th>作者名称</th>
<th>出版社</th>
<th>出版时间</th>
<th>ISBN</th>
<th>操作</th>
</tr>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr>
<td>
<a><%#Eval("BookID")%></a>
</td>
<td>
<a><%#Eval("BookName")%></a>
</td>
<td>
<a><%#Eval("AuthorName")%></a>
</td>
<td>
<a><%#Eval("Publishing")%></a>
</td>
<td>
<a><%#Eval("PublishingTime")%></a>
</td>
<td>
<a><%#Eval("ISBN")%></a>
</td>
<td>
<a href="../Manager/BookDetaileInfoAndUpdate.aspx?id=<%#Eval("BookID")%>&Is=true">详细信息</a>
<a href="../Manager/BookDetaileInfoAndUpdate.aspx?id=<%#Eval("BookID")%>&Is=false">| 修改</a>
<asp:LinkButton ID="LnkDeleteCategory" runat="server" CssClass="link-del" CommandArgument='<%#Eval("BookID")%>' OnClientClick="return confirm('确定要删除吗?')" OnClick="LnkDeleteCategory_Click">| 删除</asp:LinkButton>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<div class="list-page">
<!--分页-->
<asp:LinkButton ID="FirstPage" runat="server" OnClick="FirstPage_Click">首页</asp:LinkButton>
<asp:LinkButton ID="PreviousPage" runat="server" OnClick="PreviousPage_Click">上一页</asp:LinkButton>
<asp:Label ID="CurrentPage" runat="server" Text="Label">1</asp:Label>
/
<asp:Label ID="TotalPage" runat="server" Text="Label">0</asp:Label>页
<asp:LinkButton ID="NextPage" runat="server" OnClick="NextPage_Click">下一页</asp:LinkButton>
<asp:LinkButton ID="EndPage" runat="server" OnClick="EndPage_Click">尾页</asp:LinkButton>
</div>
</div>
</div>
</asp:Content>
后台代码:
using System;
using System.Web.UI.WebControls;
using BLL;
using Tools; namespace Shop.Manager
{
public partial class WebForm4 : System.Web.UI.Page
{
BookInfoBLL bookinfobll = new BookInfoBLL();
AlbumBLL albumbll = new AlbumBLL(); protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//绑定图书信息
DisplayTotalPages();//显示总计多少页
Show();//初始化显示第一页,默认当前为第一页
State();//初始化导航按钮的使用状态
}
} #region 分页 /// <summary>
/// 按照哪一个字段进行排序(在进行查询记录时)
/// </summary>
public string OderbyField = "BookID"; /// <summary>
/// 查询字段(中间以逗号隔开,开头不加逗号,末尾不加逗号)
/// </summary>
public string QueryField = "[BookID],[BookName],[AuthorName],[Publishing],[PublishingTime],[ISBN]"; /// <summary>
/// 表名
/// </summary>
public string TableName = "Tb_BookInfo"; /// <summary>
/// 每一页显示数据量
/// </summary>
public int CountPage = 5; /// <summary>
/// 首页
/// </summary>
protected void FirstPage_Click(object sender, EventArgs e)
{
this.CurrentPage.Text = "1";
Show();
State();
} /// <summary>
/// 上一页
/// </summary>
protected void PreviousPage_Click(object sender, EventArgs e)
{
this.CurrentPage.Text = (Convert.ToInt32(this.CurrentPage.Text) - 1).ToString();
Show();
State();
} /// <summary>
/// 下一页
/// </summary>
protected void NextPage_Click(object sender, EventArgs e)
{
this.CurrentPage.Text = (Convert.ToInt32(this.CurrentPage.Text) + 1).ToString();
Show();
State();
} /// <summary>
/// 尾页
/// </summary>
protected void EndPage_Click(object sender, EventArgs e)
{
this.CurrentPage.Text = this.TotalPage.Text;
Show();
State();
} /// <summary>
/// 显示总计多少页
/// </summary>
public void DisplayTotalPages()
{
string text = "select count(*) from " + TableName + ""; int page = Convert.ToInt32(SelectDataSource.ExcuteScalar(text));//获取总条数 this.TotalPage.Text = (Math.Ceiling(((page * 1.0 / CountPage)))).ToString();
} /// <summary>
/// 状态设置
/// </summary>
public void State()
{
if (this.CurrentPage.Text == "1")//如果当前页为第一页,则前一页和首页按钮禁用
{
this.FirstPage.Enabled = false;
this.PreviousPage.Enabled = false;
this.EndPage.Enabled = true;
this.NextPage.Enabled = true;
}
if (this.CurrentPage.Text == this.TotalPage.Text)//如果当前页码等于总页码,则后一页和尾页按钮禁用
{
this.FirstPage.Enabled = true;
this.PreviousPage.Enabled = true;
this.EndPage.Enabled = false;
this.NextPage.Enabled = false;
}
if (this.CurrentPage.Text == "1" && this.TotalPage.Text == "1")//当前页码与总页码都等于1时,(记录数小于要显示的条数)
{
this.FirstPage.Enabled = false;
this.PreviousPage.Enabled = false;
this.EndPage.Enabled = false;
this.NextPage.Enabled = false;
}
if (Convert.ToInt32(this.CurrentPage.Text) > 1 && Convert.ToInt32(this.CurrentPage.Text) < Convert.ToInt32(this.TotalPage.Text))//如果当前也在首页和尾页之间则四个按钮均可用
{
this.FirstPage.Enabled = true;
this.PreviousPage.Enabled = true;
this.EndPage.Enabled = true;
this.NextPage.Enabled = true;
}
} /// <summary>
/// 显示数据,绑定数据
/// </summary>
public void Show()
{
string sql = @"select * from (select ROW_NUMBER() over(order by " + OderbyField + ") as rownum, " + QueryField + " from " + TableName + ") as a where a.rownum > '" + (Convert.ToInt32(this.CurrentPage.Text) - 1) * CountPage + "' and a.rownum <='" + Convert.ToInt32(this.CurrentPage.Text) * CountPage + "' order by a.rownum ASC"; //根据上面的sql语句给定Repeater控件数据源
this.Repeater1.DataSource = SelectDataSource.DataSource(sql);
this.Repeater1.DataBind();
} #endregion
}
}
ASP.NET - 分页的更多相关文章
- asp.net分页控件
一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Reg ...
- asp.net 分页-自己写分页控件
去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认 ...
- (转)asp.net分页存储过程
Asp.Net分页存储过程 SQL分页语句 一.比较万能的分页: sql代码: 1 2 3 select top 每页显示的记录数 * from topic where id not in (sel ...
- 《ASP.NET1200例》<asp:DataList>分页显示图片
aspx页面代码 <asp:DataList ID="dlPhoto" runat="server" Height="137px" W ...
- ASP.NET分页存储过程,解决搜索时丢失条件信息
存储过程: -- ============================================= -- Author: -- Create date: -- Description: 分页 ...
- 【asp.net爬虫】asp.NET分页控件抓取第n页数据 javascript:__doPostBack
最近在模拟HTTP请求抓取数据,但是服务器是asp.net开发的 分页控件代码 <tr> <td align="left">共 210&am ...
- ASP.NET分页正品—分页真
承接上篇博文<ASP.NET真假分页-假分页>:http://blog.csdn.net/u010773667/article/details/38845009,继续解说ASP.NE ...
- ASP.NET 分页+组合查询 练习
分页和组合查询都是通过拼接SQL语句到数据库查询进行实现 到汽车表(car)中查询 ,汽车表选取了“编号 code”,“车名 name”,“日期 time”,“油耗 oil ”,“马力 powers” ...
- asp.net分页之AJAX 分页
查询功能是开发中最重要的一个功能,大量数据的显示,我们用的最多的就是分页. 在ASP.NET 中有很多数据展现的控件,比如Repeater.GridView,用的最多的GridView,它同时也自带了 ...
随机推荐
- 基于visual Studio2013解决算法导论之016查找最大值最小值
题目 查找最大.最小值 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> ...
- 基于visual Studio2013解决C语言竞赛题之0514单词统计
题目 解决代码及点评 /************************************************************************/ /* 14. 有一行字 ...
- secureCRT登录不上ubuntu,Connection closed
secureCRT登录不上ubuntu 1.第一个原因是sshd服务没开,或者防火墙没关.装好sshd并打开就好. http://www.cnblogs.com/mylinux/p/5101956.h ...
- 自定义Log4cpp的日志输出格式
// 1. 实例化一个PatternLayout对象 log4cpp::PatternLayout* pLayout = new log4cpp::PatternLayout(); // 2. 实例化 ...
- new Handler().postDelayed() 延迟intent跳转
原文地址http://blog.csdn.net/x605940745/article/details/19401549 new Handler().postDelayed(new Runnable( ...
- Collections.sort方法对list排序的两种方式
Collections.sort( )分为两部分,一部分为排序规则,一部分为排序算法 . 规则用来判断对象,算法则考虑如何进行排序 对于自定义对象,sort()不知道规则,所以无法比较,这种情况下一定 ...
- 常用字符串string
字符串 特性: 不可变性 当一个字符串赋新值时,老值依旧在(靠GC来回收) 可以看做是char类型的只读数组 eg:string str="abcd"; str[0]---> ...
- Ch02 从零开始实例学习6
演练:理解Edit方法和Edit视图 原文链接:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/exam ...
- 在Windows上使用CodeLite+MinGW+Clang进行开发
前几天听说clang 3.4已经release了,然后我又手痒就折腾一下,在这里记录一下折腾的经过. 在以前就试过clang-cl+VC的开发环境,编译代码到是没发现什么大问题,有不少警告而已,不过c ...
- UPC 2959: Caoshen like math 这就是个水题
http://acm.upc.edu.cn/problem.php?id=2959 这就是个水题,之所以要写这个题是感觉很有纪念意义 用力看就是盲……23333333333333333 这个题就是最小 ...