1,第一次全部把数据加载到内存中,然后再做分页,性能差,不推荐。

2,GridView自带分页

3,AspNetPager分页控件  这个是第三分控件需要下载,很好用

4,自己写分页

前三种就不介绍如何写了,网上很多,今天就来记录一下自己写的分页,不需要下载任何东西,全部都是代码完成。

原理则是通过URL来传递参数(第几页,每个多少个,总记录数等),最终生成这样的,每个都是一个超链接,只是传的当前页的参数不同

我们的前台

  <form id="form1" runat="server">
<div>
//数据显示
<asp:Repeater ID="rpTest" runat="server">
<HeaderTemplate>
<table style="width:80%">
<tr>
<th style="width:20%">产品名</th>
<th style="width:20%">单价</th>
<th style="width:20%">分类ID</th>
<th style="width:20%">你猜猜</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Eval("[ProductName]") %></td>
<td><%#Eval("[UnitPrice]") %></td>
<td><%#Eval("[CategoryID]") %></td>
<td><%#Eval("[QuantityPerUnit]") %></td>
</tr> </ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater> </div>
<br />

//分页
<div class="page">
<div class="details">
<span>每页<font><%=PageSize %></font>条</span> <span>共<font><%=PageCount %></font>条记录</span>
</div>
<div id="PageContent" class="paging" runat="server">
</div>

<script>
              function Jump() {     //跳转方法       
                 window.location.href = "FenYeDemoOne.aspx?PageIndex=" + $("#textPage").val();
                }
         </script>

结构我们准备好了,然后把我们的样式给进来

/* 分页 --------------- */
.page{ width:%; float:left; margin:-1px ; background:#C9E4FF;}
.details{ height:26px; float:left; padding:16px 16px 16px;}
.details span{ height:26px; line-height:26px; float:left; padding: 5px ;}
.details span font{ padding: 5px;}
.paging{ height:26px; float:right; padding:16px 16px 16px ;}
.paging a{ height:26px; float:left; line-height:26px; padding: 9px; margin: 6px; background:#FFF; border-radius:2px;}
.paging span{ height:26px; float:left; line-height:26px; padding: 10px; margin: 6px;}
.paging span.opt{ background:#009EFF; color:#FFF;}
.paging a:hover{ text-decoration:none;}
.paging input{ width:58px; height:26px; float:left; margin: 6px; text-align:center;/* border:1px solid #D2D7DD; border-right:0px;*/}
.paging a.res{ height:26px; float:left; color:#FFF; line-height:26px; margin:0px; border:0px; background:#009EFF; border-radius: 2px 2px ;}
.paging a.res:hover{background:#00B6EC;}
.paging span.cpb{ background:#009EFF; color:#FFF;}
.paging span.disabled, .paging span.disabled{ height:26px; float:left; line-height:26px; padding: 9px; margin: 6px; background:#FFF;}

前台我们准备好了,我们来看后台,后台才是我们的主要

  public int PageSize = ; //每页显示多少条数据
public int PageIndex //当前页
{
get
{
object obj = ViewState["PageIndex"];
return obj == null ? : Convert.ToInt32(obj);
}
set
{
ViewState["PageIndex"] = value;
}
} public int PageCount //总记录数
{
get
{
object obj = ViewState["PageCount"];
return obj == null ? : Convert.ToInt32(obj);
}
set
{
ViewState["PageCount"] = value;
}
} public int TotalPage //总页数
{
get
{
object obj = ViewState["TotalPage"];
return obj == null ? : Convert.ToInt32(obj);
}
set
{
ViewState["TotalPage"] = value;
}
}

以上都基本会有

 protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//点的是第几页
PageIndex = Request.QueryString["PageIndex"] == null ? : Convert.ToInt32(Request.QueryString["PageIndex"].ToString());
BingData(); //绑定数据
}
} void BingData() { //string textPage = hfPage.Value; 跳转的值
//总记录数
PageCount = Convert.ToInt32(SQLDB.SqlHelper.ExecuteScalar(conn, "select count(*) from Products")); //计算总页数
if (PageCount % PageSize == )
{
TotalPage = PageCount / PageSize;
}
else
{
TotalPage = (PageCount / PageSize) + ;
}
//这里可以的话做个判断,跳转的时候如果输入大于最大的值就取最大值,小于最小值就取最小值
//if (!string.IsNullOrEmpty(textPage))
//{
// PageIndex = Convert.ToInt32(textPage); // if (Convert.ToInt32(textPage) > TotalPage)
// {
// PageIndex = TotalPage == 0 ? 1 : TotalPage;
// }
// if (Convert.ToInt32(textPage) <= 0)
// {
// PageIndex = 1;
// }
//} //SQL语句
string sql = "select top "+PageSize+"* from Products where ProductID not in (select top " + PageSize * (PageIndex - ) + " ProductID from Products)";
rpTest.DataSource=SQLDB.SqlHelper.ExecuteDataSet(conn, sql); //数据源
rpTest.DataBind();
string pageUrl = Utils.CombUrlTxt("FenYeDemoOne.aspx", "PageIndex={0}",
"__PageIndex__");//传过去的url,例如:XX.aspx?X=A&Y=B&Z=C....
PageContent.InnerHtml = Utils.OutPageList(this.PageSize, this.PageIndex, this.PageCount, pageUrl, ); //分页方法,最后一个参数书店是中间显示多少个
}

后台主要是Utils里面的两个方法

/// <summary>
/// 组合URL参数
/// </summary>
/// <param name="_url">页面地址</param>
/// <param name="_keys">参数名称</param>
/// <param name="_values">参数值</param>
/// <returns>String</returns>
public static string CombUrlTxt(string _url, string _keys, params string[] _values)
{
StringBuilder urlParams = new StringBuilder();
try
{
string[] keyArr = _keys.Split(new char[] { '&' });
for (int i = ; i < keyArr.Length; i++)
{
if (!string.IsNullOrEmpty(_values[i]) && _values[i] != "")
{
_values[i] = UrlEncode(_values[i]);
urlParams.Append(string.Format(keyArr[i], _values) + "&");
}
}
if (!string.IsNullOrEmpty(urlParams.ToString()) && _url.IndexOf("?") == -)
urlParams.Insert(, "?");
}
catch
{
return _url;
}
return _url + DelLastChar(urlParams.ToString(), "&"); //FenYeDemoOne.aspx?PageIndex=__PageIndex__
}
  /// <summary>
/// URL字符编码
/// </summary>
public static string UrlEncode(string str)
{
if (string.IsNullOrEmpty(str))
{
return "";
}
str = str.Replace("'", "");
return HttpContext.Current.Server.UrlEncode(str);
}
  /// <summary>
/// 删除最后结尾的指定字符后的字符
/// </summary>
public static string DelLastChar(string str, string strchar)
{
if (string.IsNullOrEmpty(str))
return "";
if (str.LastIndexOf(strchar) >= && str.LastIndexOf(strchar) == str.Length - )
{
return str.Substring(, str.LastIndexOf(strchar));
}
return str;
}

url里面的参数我们拼接好了

    /// <summary>
/// 返回分页页码
/// </summary>
/// <param name="pageSize">页面大小</param>
/// <param name="pageIndex">当前页</param>
/// <param name="totalCount">总记录数</param>
/// <param name="linkUrl">链接地址,__id__代表页码</param>
/// <param name="centSize">中间页码数量</param>
/// <returns></returns>
public static string OutPageList(int pageSize, int pageIndex, int totalCount, string linkUrl, int centSize)
{
//计算页数
if (totalCount < || pageSize < )
{
return "";
}
int pageCount = totalCount / pageSize;
//if (pageCount < 1)
//{
// return "";
//}
if (totalCount % pageSize > )
{
pageCount += ;
}
if (pageCount < )
{
return "";
}
StringBuilder pageStr = new StringBuilder();
string pageId = "__PageIndex__";
string firstBtn = "<a href=\"" + ReplaceStr(linkUrl, pageId, (pageIndex - ).ToString()) + "\">«上一页</a>";
string lastBtn = "<a href=\"" + ReplaceStr(linkUrl, pageId, (pageIndex + ).ToString()) + "\">下一页»</a>";
string firstStr = "<a href=\"" + ReplaceStr(linkUrl, pageId, "") + "\">1</a>";
string lastStr = "<a href=\"" + ReplaceStr(linkUrl, pageId, pageCount.ToString()) + "\">" + pageCount.ToString() + "</a>"; string textPage = "<input id=\"textPage\" value=\"" + pageIndex + "\" type=\"text\">";
string JumpPage = "<a class=\"res\" href=\"javascript:Jump();\">跳转</a>"; if (pageIndex <= )
{
firstBtn = "<span class=\"disabled\">«上一页</span>";
}
if (pageIndex >= pageCount)
{
lastBtn = "<span class=\"disabled\">下一页»</span>";
}
if (pageIndex == )
{
firstStr = "<span class=\"cpb\">1</span>";
}
if (pageIndex == pageCount && pageCount > )
{
lastStr = "<span class=\"cpb\">" + pageCount.ToString() + "</span>";
}
else if (pageCount == )
{
lastStr = "";
}
int firstNum = pageIndex - (centSize / ); //中间开始的页码
if (pageIndex < centSize)
firstNum = ;
int lastNum = pageIndex + centSize - ((centSize / ) + ); //中间结束的页码
if (lastNum >= pageCount)
lastNum = pageCount - ;
pageStr.Append(firstBtn + firstStr);
if (pageIndex >= centSize)
{
pageStr.Append("<span>...</span>\n");
}
for (int i = firstNum; i <= lastNum; i++)
{
if (i == pageIndex)
{
pageStr.Append("<span class=\"cpb\">" + i + "</span>");
}
else
{
pageStr.Append("<a href=\"" + ReplaceStr(linkUrl, pageId, i.ToString()) + "\">" + i + "</a>");
}
}
if (pageCount - pageIndex > centSize - ((centSize / )))
{
pageStr.Append("<span>...</span>");
}
pageStr.Append(lastStr + lastBtn);
pageStr.Append(textPage);
pageStr.Append(JumpPage);
return pageStr.ToString();
}
   /// <summary>
/// 替换指定的字符串
/// </summary>
/// <param name="originalStr">原字符串</param>
/// <param name="oldStr">旧字符串</param>
/// <param name="newStr">新字符串</param>
/// <returns></returns>
public static string ReplaceStr(string originalStr, string oldStr, string newStr)
{
if (string.IsNullOrEmpty(oldStr))
{
return "";
}
return originalStr.Replace(oldStr, newStr);
}

显示效果

------------------------------------------------------------------------

到此我们手动分页已完成,这样页面是会刷新的,下篇无刷新分页————》自定义ASP.NET中无刷新分页

ASP.NET中刷新分页的更多相关文章

  1. Ajax+Asp.Net无刷新分页

    1.新建解决方案,并建立四个项目BLL,DAL,Model,PagerTest,如图所示: 2.Model代码 using System; using System.Collections.Gener ...

  2. asp.netMVC中实现分页方法

    方法一:使用传统的sql语句实现分页,    public class UserprintDao如下 /// <summary> /// 取得用户申请记录列表(按分页) /// </ ...

  3. asp.net分页asp.net无刷新分页高效率分页

    项目中经常会用到分页的功能类似的项目做过无数个了,今个把自己常用的分页代码分享一下. 首先说说服务端处理的代码: 下面代码中重点是分页的sql语句的写法,其中的参数@n是当前的页码,总的来说本服务端主 ...

  4. Asp +Js 无刷新分页

    Default.aspx代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...

  5. ASP.NET中无刷新分页

    上次介绍了我们代码写的刷新分页,这次就来说说无刷新分页. 这次我们是在上次的基础上改动了一些,我们都知道想要无刷新,就需要Ajax,在我们的ASP.NET中AJax是和一般处理程序配合着用的. 无刷新 ...

  6. 在Thinkphp中使用AJAX实现无刷新分页

    在Thinkphp目录的Lib\ORG\Util\目录里新建AjaxPage.class.php,写入一下内容: <?php // +------------------------------ ...

  7. asp.net中分页与存储过程的一些总结

    一.接上文,使用的是jquery AJAX 进行分页 分页存储过程代码如下: ALTER PROCEDURE [dbo].[USP_GetAlbumByPage] @pageIndex int,--当 ...

  8. Asp.Net中的三种分页方式

    Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...

  9. asp.net中应用JQuery.pagination分页

    JQuery.pagination这款分页控件非常好用,可实现无刷新分页,为了方便下次做项目便于拷贝,所以在此发布一下,具体的实现流程如下: 效果图: JQuery.pagination的各个参数的说 ...

随机推荐

  1. (转)shell实例浅谈之产生随机数七种方法

    一.问题 Shell下有时需要使用随机数,在此总结产生随机数的方法.计算机产生的的只是“伪随机数”,不会产生绝对的随机数(是一种理想随机数).伪随机数在大量重现时也并不一定保持唯一,但一个好的伪随机产 ...

  2. PV、UV、VV,CV的含义

    其中VV和CV是播放类指标,PV和UV是浏览类指标. 1. 播放类指标 VV(Video View,播放数),是指在一个统计周期内,视频被打开的次数之和. CV(Connect Views,内容播放数 ...

  3. Fedora14 mount出现错误时解决办法【亲测有效】

    挂载时出现了如上图所示问题,看第一条英语提示,我刚开始以为是文件权限不够,改了权限之后,依旧存在这样的问题, 于是,我上网查阅了一些资料: 在解决之前,先让我们一起来了解一下nfs: NFS最大功能就 ...

  4. git如何使用

    Git是分布式的,但多数时候仍然要使用中央仓库作为所有开发者的交互中心,和svn一样,开发人员仍要在本地写代码并提交到中央服务器.Git相较于svn最大的优势就在于其强大的分支系统,而git的工作流程 ...

  5. 语文,数学,ps

    数学教2课以集合为主. 集合:是指具有某种特定性质的具体的或抽象的对象汇总成的集体,这些对象称为该集合的元素. 特点:确定性给定一个集合,哪些对象是这个集合元素,不允有模棱两可的情况.互用性任何两个元 ...

  6. 给主程序签名及第三方dll强签名

    给主程序添加签名   添加完成后会自动生成一个*.pfx文件.     给程序添加强签名方法:   本文以Quartz.dll为例,使用vs Tools下的工具命令.   打开命令工具是这个样子,   ...

  7. mysql-sql命令

    ##本单元目标 一.为什么要学习数据库 二.数据库的相关概念 DBMS.DB.SQL 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动 ...

  8. CentOS 6.5下安装Tomcat --专业增强版 非yum

    Tomcat安装 通常情况下我们要配置Tomcat是很容易的一件事情,但是如果您要架设多用户多服务的Java虚拟主机就不那么容易了.其中最大的一个问题就是Tomcat执行权限.普通方式配置的Tomca ...

  9. 认识less和webstrom的less配置

    认识less和webstrom的less配置 今天完成的事情: 首先第一件事情是,整理一下常用的颜色摄取 #F1F1F1 google的设置页面的body的背景颜色 #FFF 为google的内容块的 ...

  10. Java Knowledge series 2

    JVM Analysis & Design The object-oriented paradigm is a new and different way of thingking about ...