效果:

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 - 分页的更多相关文章

  1. asp.net分页控件

    一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Reg ...

  2. asp.net 分页-自己写分页控件

    去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认 ...

  3. (转)asp.net分页存储过程

    Asp.Net分页存储过程 SQL分页语句 一.比较万能的分页: sql代码: 1 2 3 select top 每页显示的记录数 * from topic where id not in  (sel ...

  4. 《ASP.NET1200例》<asp:DataList>分页显示图片

    aspx页面代码 <asp:DataList ID="dlPhoto" runat="server" Height="137px" W ...

  5. ASP.NET分页存储过程,解决搜索时丢失条件信息

    存储过程: -- ============================================= -- Author: -- Create date: -- Description: 分页 ...

  6. 【asp.net爬虫】asp.NET分页控件抓取第n页数据 javascript:__doPostBack

    最近在模拟HTTP请求抓取数据,但是服务器是asp.net开发的 分页控件代码 <tr> <td align="left">共&nbsp210&am ...

  7. ASP.NET分页正品—分页真

     承接上篇博文<ASP.NET真假分页-假分页>:http://blog.csdn.net/u010773667/article/details/38845009,继续解说ASP.NE ...

  8. ASP.NET 分页+组合查询 练习

    分页和组合查询都是通过拼接SQL语句到数据库查询进行实现 到汽车表(car)中查询 ,汽车表选取了“编号 code”,“车名 name”,“日期 time”,“油耗 oil ”,“马力 powers” ...

  9. asp.net分页之AJAX 分页

    查询功能是开发中最重要的一个功能,大量数据的显示,我们用的最多的就是分页. 在ASP.NET 中有很多数据展现的控件,比如Repeater.GridView,用的最多的GridView,它同时也自带了 ...

随机推荐

  1. 使用GridView来获取xml文件数据

    在任何一个系统中,数据的读取和编辑都是至关重要的.无论你是CS还是BS,都需要对数据进行操作.其实 我们可以发现,很多软件和系统最终都是对于数据库中数据的处理.之前在CS的学习过程中我们接触到了很多 ...

  2. iOS swift lazy loading

    Why bother lazy loading and purging pages, you ask? Well, in this example, it won't matter too much ...

  3. 开源框架ViewPagerIndicator的使用——TabPageIndicator

    1.导入Android-ViewPagerIndicator库文件 下载地址:https://github.com/JakeWharton/ViewPagerIndicator 2.布局文件     ...

  4. sql2008r2局域网复制订阅实操

    10.129.186.37 本机 10.129.186.95 服务器 局域网环境 复制类型:事务复制 注意点:要复制的表,必须有主键,否则不可选复制表. 要点1,局域网尝试用共享的方式保存快照文件夹, ...

  5. 数据库基础学习3-T-SQL语句

    一.语句操作的基本方法 1.选中执行. 2.注释的方法‘--’. 二.数据类型 整数:int,bigint,smallint 小数:float,decimal(长度,精度) 字符:char(n),va ...

  6. 基于RAF的一个小动画框

    RAF也即是requestAnimationFrame,之前的动画都是基于setTimeout写的,所以为了性能方面的考虑,开始使用requestAnimationFrame写动画. function ...

  7. Qt属性系统

    The Property System Qt提供一个类似于其他编译器供应商提供的精致的属性系统.然而,作为一个编译器和平台独立的库,Qt并不依赖于非标准编译器特性,如__property 或 [pro ...

  8. Android常用秘籍总结

    一.无法向模拟器push文件,显示read-only file system $adb shell mount -o remount rw/ 确保模拟器有sd卡 二.Android模拟按键 #adb ...

  9. Linux笔记——linux下的语音合成系统

    1.festival 安装:sudo apt-get install festival 使用: (SayText "Hello!") 2. espeek(ubuntu 自带) # ...

  10. 用 PS 复制权限

    用 PS 复制权限 我们要把源计算机上的文件权限复制到目的计算机上. get-acl .\s.txt | Export-Clixml sddl.xml 把 s.txt 文件的权限保存到 sddl.xm ...