要做一个关于分页写法的专题,这是今天的第一讲,自制分页,可能有些代码需要优化,希望大家给出一些中肯的建议

前台使用的repeater绑定的数据:

<form id="form1" runat="server">
<div>
<ul style="list-style: none">
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<li><%#Eval("Title") %></li>
</ItemTemplate>
</asp:Repeater>
</ul>
</div> <div id="pagerwrapper">
<table id="pager" cellspacing="">
<tbody>
<tr>
<td colspan="">
<%=RePager %>
跳转至:<asp:TextBox ID="TxtPager" runat="server"></asp:TextBox>页
<asp:Button ID="BtnOk" runat="server" Text="确定" OnClick="BtnOk_Click" />
</td>
</tr>
</tbody>
</table>
</div>
</form>

后台代码写法如下:注释已标明:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration; namespace WebApplication1
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
GetDate(); }
//这样写可以避免第一次加载之后再次加载不显示的问题
GetPager();
}
string ConStr = ConfigurationManager.ConnectionStrings["Connection"].ToString(); public string pager = string.Empty;
public string RePager = string.Empty;
int startcount = ;
int endcount = ;
//绑定数据源
public void GetDate()
{
if (Request.QueryString["pager"] != null)
{
string GetDateSql = "SELECT * FROM ( SELECT ROW_NUMBER() over(order by id) as pid,*FROM [Info]) AS aa where aa.pid>=" + Request.QueryString["pager"] + ""; using (SqlConnection conn = new SqlConnection(ConStr))
{
conn.Open();
DataSet dt = new DataSet();
SqlDataAdapter sdt = new SqlDataAdapter(GetDateSql, conn);
sdt.Fill(dt);
this.Repeater1.DataSource = dt;
this.Repeater1.DataBind();
}
}
else
       //初次加载不传入任何页码,默认显示前十条
{
string GetDateSql = "SELECT * FROM ( SELECT ROW_NUMBER() over(order by id) as pid,*FROM [Info]) AS aa "; using (SqlConnection conn = new SqlConnection(ConStr))
{
conn.Open();
DataSet dt = new DataSet();
SqlDataAdapter sdt = new SqlDataAdapter(GetDateSql, conn);
sdt.Fill(dt);
this.Repeater1.DataSource = dt;
this.Repeater1.DataBind();
}
} }
//得到页码
public void GetPager()
{
string GetTotal = "SELECT COUNT(*) FROM [Info]";
using (SqlConnection conn = new SqlConnection(ConStr))
{
conn.Open();
SqlCommand comm = new SqlCommand(GetTotal,conn);
int i = Convert.ToInt32(comm.ExecuteScalar());
int totalPageNum = (i + - ) / ;//一共的页数
int j = ;//记录当前页
string FirstPager = string.Empty;//首页
string LastPager = string.Empty;//尾页 string NextPager = string.Empty;//下一页
string PrePager = string.Empty;//上一页 int next = ;//记录下一页页码
int pre = ;//记录上一页页码 for (j = ; j <= totalPageNum; j++)
{
//Request.QueryString["value"]接受的是页码值
if (Request.QueryString["value"] == null)
{
startcount = ( + ) > totalPageNum ? totalPageNum - : - ;//中间页起始序号
//中间页终止序号
endcount = < ? : + ;
if (startcount < ) { startcount = ; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始
if (totalPageNum < endcount) { endcount = totalPageNum; } //页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
}
else
{
startcount = (int.Parse(Request.QueryString["value"]) + ) > totalPageNum ? totalPageNum - : int.Parse(Request.QueryString["value"]) - ;//中间页起始序号
//中间页终止序号
endcount = int.Parse(Request.QueryString["value"]) < ? : int.Parse(Request.QueryString["value"]) + ;
if (startcount < ) { startcount = ; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始
if (totalPageNum < endcount) { endcount = totalPageNum; } //页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
}
} if (Request.QueryString["value"] == null)
{
next = + ;
pre = ;
}
else
{
next = int.Parse(Request.QueryString["value"]) + ;
pre = int.Parse(Request.QueryString["value"]) - ;
//判断并进行越界处理
if(pre<=)
{
pre = ;
}
if(next>totalPageNum)
{
next = totalPageNum;
}
} for (j = startcount; j <= endcount; j++)
{
if (Request.QueryString["value"]==null)
{
pager += "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + * ( - ) + "&value=" + + "\">" + j + "</a>|";
}
else if (int.Parse(Request.QueryString["value"]) == j)
{
pager += "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + * (j - ) + "&value=" + j + "\"><span style=\"color:red\">" + j + "</span></a>|";
}
else
{
//10 * (j - 1)这个公式的意思是(当前页码-1)*10,可以跳转到对应页码查看相关的数据
pager += "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + * (j - ) + "&value=" + j + "\">" + j + "</a>|";
}
} FirstPager = "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + * ( - ) + "&value=" + + "\"> 首页</a>|";
LastPager = "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + * (totalPageNum - ) + "&value=" + totalPageNum + "\"> 尾页</a>|";
NextPager = "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + * (next - ) + "&value=" + next + "\"> 下一页</a>|";
PrePager = "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + * (pre - ) + "&value=" + pre + "\"> 上一页</a>|"; RePager = FirstPager + PrePager+ pager + NextPager + LastPager;//拼凑字符串
}
}
//跳转到第几页的方法
protected void BtnOk_Click(object sender, EventArgs e)
{
if (Request.QueryString["value"] == null)
{
Response.Redirect("WebForm2.aspx?pager=" + * (Convert.ToInt32(this.TxtPager.Text) - )+"&value=" + this.TxtPager.Text );
}
}
}
}

附带几条公式,如有不对,希望大家指正

信息条数/每页显示条数=一共的页数

开始页码= (当前显示页+ 5) > 总页? 总页 - 9 : 当前显示页 - 4;//中间页起始序号
//中间页终止序号
结束页码= 当前显示页 < 5 ? 10 : 当前显示页+ 5;

ASP.NET的分页方法(一)的更多相关文章

  1. asp.net数据分页方法

    /// <summary> /// 数据分页方法 /// </summary> /// <param name="PageIndex">当前页& ...

  2. ASP.NET的分页方法(二)

    第二讲主要使用到了常用的分页控件aspnetpager,这里对他就行一个简单的应用,具体大家可以到杨涛的博客上去寻找相关的DLL, 首先要先引用AspNetPager.dll,然后把这个DLL同时添加 ...

  3. ASP.NET的分页方法(四)

    这是我早先得到的一段JS代码,只需要修改一下开头的几个参数,就可以使用,不知道能否试用于静态页面呢,大家可以尝试一下 <script language="javascript" ...

  4. ASP.NET的分页方法(三)

    第三讲是应用于MVC上面的分页,很多时候MVC要和EF表达式一起使用,但是我这个使用的最原始的ADO.NET,一样实现了这个效果.要实现这个效果首先要得到MvcPager.dll,引用之后,前台操作如 ...

  5. ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版

    MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...

  6. ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页

    我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了 ...

  7. 基于Bootstrap的Asp.net Mvc 分页

    基于Bootstrap的Asp.net Mvc 分页的实现 最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一 ...

  8. AspNetPager + GridView + ASP.NET AJAX 分页无刷新实现

    准备资源: AspNetPager 下载网址:http://www.webdiyer.com/download/default.aspx ASP.NET AJAX  下载网址:http://www.a ...

  9. Asp.Net真分页技术

    最近学校要做课题,闲来没事研究了下Asp.net的分页,我使用Repeater进行数据的绑定,每次从数据库读取到8条数据填充到Repeater中,这样搞可以降低数据库的压力,提高效率. 效果图如下: ...

随机推荐

  1. mysql-备份和还原(普通还原和binlog还原)

    1)备份 mysqldump -uroot -proot share -l -F > /tmp/share.sql 说明:-l 锁表 -F 刷新日志文件(相当于flush logs) 2)还原( ...

  2. java监测方法运行时间/效率方法

    前言: 这周在写一个小项目,虽然小但是是纯调外部接口的,调完了接口还不停的循环接口返回的数据(已转换JSONArray),然后再判断值,再做不同处理,关键是数据量还比较大,这刚做完还没开始上线,测试也 ...

  3. PHP Header 缓存 --- Header 参数说明

    1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type. 2. Accept-Charset:   浏览器申 ...

  4. 嵌入式 GDB调试死锁示例

    死锁:一种情形,此时执行程序中两个或多个线程发生永久堵塞(等待),每个线程都在等待被 其他线程占用并堵塞了的资源.例如,如果线程A锁住了记录1并等待记录2,而线程B锁住了记录2并等待记录1,这样两个线 ...

  5. Linux makefile教程之make运行八[转]

    make 的运行 —————— 一 般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的.但也有时你也许只想让 make重编译某些文件, ...

  6. WCF服务通过防火墙怎么设置

    设置防火墙 1.首先点击控制面板->系统与安全->Window防火墙->点击允许程序通过Windows防火墙 2.查找Windows Communication Foundation ...

  7. 通过HttpClient来调用Web Api接口

    回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...

  8. 浏览器的DNS缓存

    通过设置hosts文件可以强制指定域名对应的IP,当修改hosts文件,想要浏览器生效,最直接的方法关闭浏览器后重新开启:如果不想重启浏览器,只需要清空浏览器的DNS缓存即可.清空DNS缓存在chro ...

  9. 【转】linux mknod命令解析

    转自:http://www.cnblogs.com/cobbliu/archive/2011/07/05/2389014.html 个人觉得linux的软件设计思想异常强大,比如把所有的设备都当做文件 ...

  10. eclipse手动导入dtd文件

    1.在eclipse的工具栏上按照“Window->Preferences->XML->XML Catalog”依次点下去,然后在右侧选中 User Specified Entrie ...