ASP.NET的分页方法(一)
要做一个关于分页写法的专题,这是今天的第一讲,自制分页,可能有些代码需要优化,希望大家给出一些中肯的建议
前台使用的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的分页方法(一)的更多相关文章
- asp.net数据分页方法
/// <summary> /// 数据分页方法 /// </summary> /// <param name="PageIndex">当前页& ...
- ASP.NET的分页方法(二)
第二讲主要使用到了常用的分页控件aspnetpager,这里对他就行一个简单的应用,具体大家可以到杨涛的博客上去寻找相关的DLL, 首先要先引用AspNetPager.dll,然后把这个DLL同时添加 ...
- ASP.NET的分页方法(四)
这是我早先得到的一段JS代码,只需要修改一下开头的几个参数,就可以使用,不知道能否试用于静态页面呢,大家可以尝试一下 <script language="javascript" ...
- ASP.NET的分页方法(三)
第三讲是应用于MVC上面的分页,很多时候MVC要和EF表达式一起使用,但是我这个使用的最原始的ADO.NET,一样实现了这个效果.要实现这个效果首先要得到MvcPager.dll,引用之后,前台操作如 ...
- ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版
MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...
- ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页
我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了 ...
- 基于Bootstrap的Asp.net Mvc 分页
基于Bootstrap的Asp.net Mvc 分页的实现 最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一 ...
- AspNetPager + GridView + ASP.NET AJAX 分页无刷新实现
准备资源: AspNetPager 下载网址:http://www.webdiyer.com/download/default.aspx ASP.NET AJAX 下载网址:http://www.a ...
- Asp.Net真分页技术
最近学校要做课题,闲来没事研究了下Asp.net的分页,我使用Repeater进行数据的绑定,每次从数据库读取到8条数据填充到Repeater中,这样搞可以降低数据库的压力,提高效率. 效果图如下: ...
随机推荐
- 重装yum
1)卸载yum rpm -aq|grep yum|xargs rpm -e --nodeps 2)下载并安装python-urlgrabber,python-pycurl,yum-metadata-p ...
- UVALive 4043 Ants 蚂蚁(二分图最佳完美匹配,KM算法)
题意: 有n个蚂蚁n棵树,蚂蚁与树要配对,在配对成功的一对之间连一条线段,要求所有线段不能相交.按顺序输出蚂蚁所匹配的树. 思路: 这个题目真是技巧啊,不能用贪心来为每个蚂蚁选择最近的树,这样很可能是 ...
- 【英语】Bingo口语笔记(53) - 口语中不可望文生义的词语
- Java中SynchronizedMap与ConcurrentHashMap的对比
如何使用 概述 ConcurrentHashMap: 线程安全: 其将整个Hash桶进行了分段segment,也就是将这个大的数组分成了几个小的片段segment,而且每个小的片段segment上面都 ...
- Java中String为什么是final
final概念: 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父亲被继承.因此,一个类不能既被声明为abstract,又被声明为final. 将变量或方法声明为final,可以 ...
- 【转】iOS开发UI篇—iPad和iPhone开发的比较
原文网址:http://www.cnblogs.com/wendingding/p/3918007.html iOS开发UI篇—iPad和iPhone开发的比较 一.iPad简介 1.什么是iPad ...
- 细数Android开源项目中那些频繁使用的并发库中的类
这篇blog旨在帮助大家 梳理一下前面分析的那些开源代码中喜欢使用的一些类,这对我们真正理解这些项目是有极大好处的,以后遇到类似问题 我们就可以自己模仿他们也写 出类似的代码. 1.ExecutorS ...
- activity_main.xml与fragment_main.xml
见: http://blog.sina.com.cn/s/blog_3e28c8a50101fqvw.html http://blog.sina.com.cn/s/blog_3e28c8a50101f ...
- nodejs、sass、backbone等api地址
1.nodejs Node.js v4.2.4 手册 & 文档 2.sass Sass (3.4.21) 中文文档 3.backbone Backbone.js(1.1.2) API中文文档 ...
- jQuery基础知识--Form基础(续)
下拉框应用 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...