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中,这样搞可以降低数据库的压力,提高效率. 效果图如下: ...
随机推荐
- SQL语句方法语法总结(三)
1.时间相关的操作 月份.星期.日期.时间格式转换.第几周 ,'2014-4-1') as '时间间隔', --在所给时间上加上时间间隔,转换成DATETIME DATEDIFF(DAY,'2014- ...
- singleton单例模式
单例设计模式 单例设计模式概述 单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供 优点: 在系统内存中只存在一个对象,因此可以解决系统资源,对于一些需要频繁 ...
- 20160203.CCPP体系详解(0013天)
程序片段(01):数组.c+02.数组初始化语法.c 内容概要:数组 ///01.数组.c #include <stdio.h> #include <stdlib.h> //0 ...
- [转载] ffmpeg超详细综合教程——摄像头直播
本文的示例将实现:读取PC摄像头视频数据并以RTMP协议发送为直播流.示例包含了 1.ffmpeg的libavdevice的使用 2.视频解码.编码.推流的基本流程 具有较强的综合性. 要使用liba ...
- js sleep效果
js sleep效果 s = setInterval(function(){ //需要执行的函数 alert("我延迟了2秒弹出"); },2000); 并不是每2秒执行一次,而是 ...
- 一天一点MySQL复习——获取数据库系统时间、变量赋值、变量比较
一.SQL获取系统时间 mysql> select now() from dual; +---------------------+ | now() | +------------------- ...
- 如何使用 Java 中的数组
Java 中操作数组只需要四个步骤: 1. 声明数组 语法: 数据类型[ ] 数组名: 或者 数据类型 数组名[ ]: 其中,数组名可以是任意合法的变量名,如: 2. 分配空间 简单地说,就是指 ...
- SQLServer如何快速生成100万条不重复的随机8位数字
最近在论坛看到有人问,如何快速生成100万不重复的8位编号,对于这个问题,有几点是需要注意的: 1. 如何生成8位随机数,生成的数越随机,重复的可能性当然越小 2. 控制不重复 3. ...
- XAMPP 的安装配置
--转载时请保留下面,以供大家加我MSN,增强交流,共同学习.--姜庭华 msn: jaimejth@live.cn--博客:http://blog.csdn.net/jaimejth 软件下载在以 ...
- ulimit 命令
用途:ulimit用于shell启动进程所占用的资源. 类别:shell内建命令 语法格式:ulimit [-acdfHlmnpsStvw] [size] 参数: -H 设置硬资源限制. -S 设置软 ...