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,禁止转载!