cPage分页,asp.net自定义分页,url传值分页,支持datalist、gridview、Repeater等
Posted on 2013-12-18 08:46 weekzero 阅读(710) 评论(0) 编辑 收藏 举报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代码:
1 2 3 4 5 | 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代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | 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,禁止转载!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现