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中,这样搞可以降低数据库的压力,提高效率. 效果图如下: ...
随机推荐
- CodeForces Round #250 Div2
A. The Child and Homework 注意仔细读题,WA了好多次,=_= #include <cstdio> #include <cstring> #includ ...
- HDU 2830 Matrix Swapping II
给一个矩阵,依然是求满足条件的最大子矩阵 不过题目中说任意两列可以交换,这是对题目的简化 求出h数组以后直接排序,然后找出(col-j)*h[j]的最大值即可(这里的j是从0开始) 因为排序会影响到h ...
- WEBUS2.0 In Action - 搜索操作指南 - (4)
上一篇:WEBUS2.0 In Action - 搜索操作指南(3) 6. 搜索多个索引 为了提升性能, 我们可以从多个索引同时进行搜索, Webus.Search.MultiSearcher提供了相 ...
- VBScript - CUD registry key and value
http://msdn.microsoft.com/en-us/library/aa384906(v=vs.85).aspx HKEY_LOCAL_MACHINE = &H80000002 s ...
- Jave 鼠标点击画太极 PaintTaiji (整理)
package demo; /** * Jave 鼠标点击画太极 PaintTaiji (整理) * 声明: * 又是一份没有注释的代码,而且时间已经久远了,不过代码很短,解读起来应该 * 不会很麻烦 ...
- 【转】发布的QT程序无法显示图标和图片的问题
在windows下编译好的QT程序在其他没有安装QT的机器上会出现图标和图片无法正常显示的问题. 这时我们可以通过以下方式来解决: 在release文件夹里创建plugins文件夹,并将QT安装目录下 ...
- (转)Python 字典排序
我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value.可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value ...
- 不要随随便便的distinct和order by
相关查询非常慢,通过程序拿到了相关sqlexplainexplain SELECT DISTINCT(o.orders_id), o.oa_order_id, customers_email_addr ...
- http tcp联系区别
术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议.“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络.把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到 ...
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:1.资源准备
最近,在VmwareStation 10虚拟机上,基于CentOS5.4安装Oracle 11g RAC,并把过程记录下来.刚开始时,是基于CentOS 6.4安装Oracle 11g RAC, 没有 ...