asp.net分頁是最最經常使用的功能,實現方式也不少,使用不一樣的控件有不一樣的分頁方式。javascript
下面分享一個咱們團隊內部使用了多年的一個分頁控件cPage,是本身設計編寫,沒有冗餘,簡單、快速。css
cPage,如今版本是3.2了,很簡單的一個分頁功能,能夠到這裏【下載】。最好是下載這個demo。html
cPage是asp.net分頁控件,也能夠叫作分頁組件,更確切的應該叫作分頁模塊,也或者叫作分頁通用代碼。java
cPage,使用url傳值實現分頁,支持多種asp.net數據控件,如datalist、gridview、Repeater等,支持多種數據源,如SQL Server、Oracle、mysql、DB2等,說的白一點就是可以生成datatable的就能夠。mysql
支持url重寫(UrlRewrite)分頁,好比,經常使用url分頁「info.aspx?p=[#p#]」,url重寫「info_[#p#].html」,url中頁碼是經過「[#p#]」傳遞的,因此支持任何形式的分頁,更多詳細請查閱demo。sql
先來一張效果圖:數據庫
cPage分裝了dll,名稱爲「cPage.dll」,更重要的是要使用,因此demo很重要。下面是demo的代碼:asp.net
demo使用了sqlserver2008r2數據庫,IDE是vs2010。sqlserver
demo分頁效果圖:this
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,禁止轉載!