cPage分页,asp.net自定义分页,url传值分页,支持datalist、gridview、Repeater等
asp.net分页是最最常用的功能,实现方式也很多,使用不同的控件有不同的分页方式。
下面分享一个我们团队内部使用了多年的一个分页控件cPage,是自己设计编写,没有冗余,简单、快速。
cPage,现在版本是3.2了,很简单的一个分页功能,可以到这里【下载】。最好是下载这个demo。
cPage是asp.net分页控件,也可以叫做分页组件,更确切的应该叫做分页模块,也或者叫做分页通用代码。
cPage,使用url传值实现分页,支持多种asp.net数据控件,如datalist、gridview、Repeater等,支持多种数据源,如SQL Server、Oracle、mysql、DB2等,说的白一点就是能够生成datatable的就可以。
支持url重写(UrlRewrite)分页,比如,常用url分页“info.aspx?p=[#p#]”,url重写“info_[#p#].html”,url中页码是通过“[#p#]”传递的,所以支持任何形式的分页,更多详细请查阅demo。
先来一张效果图:

cPage分装了dll,名称为“cPage.dll”,更重要的是要使用,所以demo很重要。下面是demo的代码:
demo使用了sqlserver2008r2数据库,IDE是vs2010。
demo分页效果图:

sql代码:
CREATE TABLE [info](
[ID] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](50) NULL,
[card] [nvarchar](50) NOT NULL,
[createtime] [datetime] NULL)
demo的页面,cPageList.aspx,代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="cPageList.aspx.cs" Inherits="cPageList" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
body ,html { font-size:12px;}
a,table,td,div{font-size:12px; } a:link {text-decoration: none;}
a:visited {text-decoration: none;}
a:hover { text-decoration: none;}
a:active {text-decoration: none;} /*-----------------------------------cPage分页css(v3.2)----------------------------------------------*/
.pagenum{ padding:2px 6px 2px 6px; margin: 0 0 0 4px; text-align:center; border:1px solid #79b7e7;display:inline-block;}
.pagenum:hover{border:1px solid #f5d37c; background-color:#fdf4de ; text-decoration:none; }
.pagecur{background-color:#fdf4de; padding:2px 6px 2px 6px; margin: 0 0 0 4px; text-align:center; font-weight:bold; border:1px solid #f5d37c;display:inline-block;}
.pagecur:hover{border:1px solid #f5d37c; background-color:#fdf4de ; text-decoration:none; }
.pagecolor{color:#3f3f3f;}
.pagecolorc{color:#FF6600;font-weight: bold;}
/*-----------------------------------cPage分页css(v3.2)----------------------------------------------*/
</style>
<script language="javascript" type="text/javascript">
// 鼠标经过改变行的颜色(begin)
if (!objbeforeItem) {
var objbeforeItem = null;
var objbeforeItembackgroundColor = null;
}
function ItemOver(obj) { objbeforeItembackgroundColor = obj.style.backgroundColor;
objbeforeItem = obj;
obj.style.backgroundColor = "#DDF0FF";
}
function ItemOut(obj) {
if (objbeforeItem) {
objbeforeItem.style.backgroundColor = objbeforeItembackgroundColor;
}
}
// 鼠标经过改变行的颜色(end)
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<table width="630" border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse;"
bordercolor="#eaeaea">
<tr style="text-align: center; height: 30px; font-weight: bold;">
<td>
姓名
</td>
<td>
身份证号
</td>
<td>
建立时间
</td>
<td width="130">
操作
</td>
</tr>
<asp:Repeater ID="cPage_repeaterList" runat="server" OnItemCommand="cPage_repeaterList_ItemCommand"
OnItemDataBound="cPage_repeaterList_ItemDataBound">
<ItemTemplate>
<tr style="height: 28px; <%# Container.ItemIndex % 2 == 1 ? "background-color:#F7F6F3": ""%>"
onmouseover="ItemOver(this)" onmouseout="ItemOut(this)">
<td style="padding: 0 0 0 5px">
<%# Eval("name")%>
</td>
<td style="text-align: center;">
<%# Eval("card")%>
</td>
<td style="text-align: center;">
<%# Eval("createtime", "{0:yyyy-MM-dd HH:mm:ss}")%>
</td>
<td style="text-align: center;">
<asp:HiddenField ID="hfID" Value='<%#Eval("ID") %>' runat="server" />
<a href="userop.aspx?act=up&id=<%# Eval("ID")%>&p=<%=p %>" style="color: Red">【修改】</a>
<asp:LinkButton ID="lnkbtnDel" CommandName="del" CommandArgument='<%# Eval("id")%>'
Style="color: Red" runat="server">【删除】</asp:LinkButton>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td style="text-align: left; height: 50px">
<asp:Label ID="lblpage" runat="server"></asp:Label>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
cPageList.aspx.cs代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; using System.Text.RegularExpressions; using System.Data;
using System.Configuration;
using System.Data.SqlClient; using cPage; public partial class cPageList : System.Web.UI.Page
{
public int p = 1; //页码 protected void Page_Load(object sender, EventArgs e)
{
#region 分页获得页码
string _p = Request.QueryString["p"]; if (string.IsNullOrEmpty(_p))
_p = "1"; if (IsIntType(_p))
{
p = Convert.ToInt32(_p);
}
else
{
ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "cPageScript", "<script language=\"javascript\" type=\"text/javascript\">alert(\"页码不正确\");history.back();</script>", true);
return;
}
#endregion if (!Page.IsPostBack)
{
cPageBind();
}
} protected void cPageBind()
{
string _url = Request.FilePath + "?p=[#p#]";
int _pageNum = 8; // 中间页码数量
int _pageSize = 10; // 每页记录数
int _beginIndex = 0; // 开始记录
int _endIndex = 0; // 结束记录 string sqlc = "select count(ID) from info";
string sqlorder = "order by ID desc";
string sqltable = "info"; DataTable DTc = GetDt(sqlc); lblpage.Text = mPage.getPage(Convert.ToInt32(DTc.Rows[0][0].ToString()), _pageSize, _pageNum, p, out _beginIndex, out _endIndex, _url); //sql server 分页代码(sql server 2005后版本可用)
string sql = ""; sql = "WITH NoPagedTable AS (" +
"SELECT ROW_NUMBER() OVER (" + sqlorder + ") AS rowIndex, " +
" * " +
" FROM " + sqltable + " " +
")select * from NoPagedTable WHERE rowIndex>=" + _beginIndex + " and rowIndex<=" + _endIndex;
// DataTable DT = GetDt(sql); cPage_repeaterList.DataSource = DT;
cPage_repeaterList.DataBind(); } protected void cPage_repeaterList_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemIndex > -1)
{
((LinkButton)e.Item.FindControl("lnkbtnDel")).Attributes["onclick"] = "return confirm('确认要删除吗?');";
}
} protected void cPage_repeaterList_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "del")
{
try
{
long _ID = Convert.ToInt64(((HiddenField)(e.Item.FindControl("hfID"))).Value); string sql = ""; sql = "delete info where ID=" + _ID; int flag = runSQL(sql); if (flag == 1)
{
cPageBind();
}
else
{
ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "cPageScript", "<script language=\"javascript\" type=\"text/javascript\">alert(\"删除失败\");history.back();</script>", true); } }
catch
{
ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "cPageScript", "<script language=\"javascript\" type=\"text/javascript\">alert(\"数据格式不正确(异常)\");history.back();</script>", true); }
}
} /// <summary>
/// 数据库操作,执行sql语句
/// </summary>
/// <param name="inSQL"></param>
/// <returns></returns>
public int runSQL(string inSQL)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
SqlCommand sqlCmd = new SqlCommand(inSQL, conn); try
{
conn.Open();
sqlCmd.CommandTimeout = 600;
sqlCmd.ExecuteNonQuery();
return 1;
}
catch
{
return 0;
}
finally
{
sqlCmd.Dispose();
conn.Close();
conn.Dispose();
}
} /// <summary>
/// 数据库操作,根据sql获取DataTable
/// </summary>
/// <param name="inSQL"></param>
/// <returns></returns>
public DataTable GetDt(string inSQL)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
SqlDataAdapter sqlDA = new SqlDataAdapter(inSQL, conn);
DataTable outDt = new DataTable(); conn.Open();
sqlDA.SelectCommand.CommandTimeout = 600;
sqlDA.Fill(outDt); sqlDA.Dispose();
conn.Close();
conn.Dispose(); return outDt; } /// <summary>
/// 判断是否是正整数
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static bool IsIntType(string text)
{
Regex reg = new Regex("^[0-9]+$");
Match ma = reg.Match(text);
if (ma.Success)
{
return true;
}
else
{
return false;
}
} }
也可以在这里下载:【cPage】 【cPage-demo】
版权所有,bubufx,禁止转载!
cPage分页,asp.net自定义分页,url传值分页,支持datalist、gridview、Repeater等的更多相关文章
- 前端使用AngularJS的$resource,后端ASP.NET Web API,实现分页、过滤
在上一篇中实现了增删改查,本篇实现分页和过滤. 本系列包括: 1.前端使用AngularJS的$resource,后端ASP.NET Web API,实现增删改查2.前端使用AngularJS的$re ...
- web框架详解之tornado 三 url和分页
一.代码目录构建 controllers :处理业务逻辑的 account:处理账户相关的 上面目录作用和内容 controllers 包 :处理业务逻辑的 account:处理账户相关的 home ...
- MvcPager 概述 MvcPager 分页示例 — 标准Ajax分页 对SEO进行优化的ajax分页 (支持asp.net mvc)
该示例演示如何使用MvcPager最基本的Ajax分页模式. 使用AjaxHelper的Pager扩展方法来实现Ajax分页,使用Ajax分页模式时,必须至少指定MvcAjaxOptions的Upda ...
- PHP+jQuery 长文章分页类 ( 支持 url / ajax 分页方式 )
/* ******* 环境:Apache2.2.8 ( 2.2.17 ) + PHP5.2.6 ( 5.3.3 ) + MySQL5.0.51b ( 5.5.8 ) + jQuery-1.8 **** ...
- Asp.Net中的三种分页方式
Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...
- Asp.Net中的三种分页方式总结
本人ASP.net初学,网上找了一些分页的资料,看到这篇文章,没看到作者在名字,我转了你的文章,只为我可以用的时候方便查看,2010的文章了,不知道这技术是否过期. 以下才是正文 通常分页有3种方法, ...
- Asp.net web form url route使用总结
asp.net web form 使用URL路由 注不是mvc中的路由 一.前台控件使用路由,通过表达式生成url地址,注意给路由参数赋值,防止使用了其他路由表达式值方式1:<asp:Hyper ...
- ASP.NET MVC3 通过Url传多个参数方法
MVC3通过URL传值,一般情况下都会遇到 [从客户端(&)中检测到有潜在危险的 Request.Path 值]的问题 这个问题的解决方法,我的其他博文已经有了说明,这里给出连接 ; [从客户 ...
- ASP.NET 4的Demo实践:URL路由改进支持
从.NET框架3.5 SP1开始,微软推出了ASP.NET路由支持,从而实现了特定资源的URL与其对应的Web服务器上的物理文件之间的彻底解耦.借助于ASP.NET路由支持,开发人员可以定义一组路由规 ...
随机推荐
- LeetCode 21 -- Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
- linux装JDK
一.安装sun java升 级到ubuntu 11.10之后.ubuntu 默认自带的是openjdkjava.默认情况这个是能够使用的,但是如果你想搭建专业的开发环境,还是需要使用sun的靠谱.另外 ...
- softwareTesting_work2_question1
input类 package com.Phantom; import java.util.ArrayList; import java.util.HashMap; import java.util.L ...
- sass基础编写流程
这是之前整理在word上的基础流程 sass是Ruby语言开发的一个用于动态编程css文件的框架 所以sass的运行依赖Ruby环境 所以要先安装Ruby 参见详细教程(安装参照慕课网有详细的教程) ...
- Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path 解决办法
返回数据解析错误 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT ...
- 安装Python2.7环境
1.下载并根据提示安装python_2.7.10_x64 2.将安装目录配置到环境变量path中 3.在命令后台中输入Python,出现下图中信息表示安装成功
- 函数中的static静态变量
静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果. <?php function testStatic($start,$end){ st ...
- do while 和 while 的区别
package review20140419;/* * do while 和 while 的区别 */public class Test3 { //程序的入口 public static ...
- Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法
Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法 最近几天从网上找了几个asp.net的登录案例想要研究研究代码,结果在用 Sql Server2005附 ...
- 判断IP地址的类型
#include <stdio.h> #include <stdlib.h> void main() { ]; int ip_addr; printf("请输入IP地 ...