Repeater沒有自帶的分頁功能,搜羅了一下發現AspNetPager.dll這個插件比較好用拿出來分享一下,老鳥勿噴
先來一張效果圖

該插件的好處在這里就不多說了,直接上代碼
(1)首先需要把AspNetPager.dll引用到項目中來
(2)Aspx代碼
ASPX代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Demo.aspx.cs" Inherits="WebDiyer.Demo" %> <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %> <!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 id="Head1" runat="server"> <title>分頁測試</title> <link href="Style/Pager.css" rel="stylesheet" type="text/css" /> <script type="text/javascript"> function CgColor(type, obj) { if (type == "click") { for (var i = 1; i < document.getElementById("list").rows.length; i++) { document.getElementById("list").rows[i].style.backgroundColor = ""; document.getElementById("list").rows[i].tag = false; } obj.style.backgroundColor = "#E1E9FD"; obj.tag = true; } else if (type == "over") { if (!obj.tag) { obj.style.backgroundColor = "#EEF2FB"; } } else if (type == "out") { if (!obj.tag) { obj.style.backgroundColor = ""; } } } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <div style="border: 1px solid #CCC; padding: 5px; margin-top: 5px; margin-bottom: 5px;"> Order ID:<asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem>>=</asp:ListItem> <asp:ListItem><=</asp:ListItem> <asp:ListItem>=</asp:ListItem> </asp:DropDownList> <asp:TextBox ID="tb_orderid" runat="server" Width="90px"></asp:TextBox> <asp:Button ID="btn_search" runat="server" OnClick="btn_search_Click" Text="Search" /> <asp:Button ID="btn_all" runat="server" OnClick="btn_all_Click" Text="Show All" Enabled="false" /> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="tb_orderid" Display="Dynamic" ErrorMessage="RequiredFieldValidator">必需</asp:RequiredFieldValidator> <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="tb_orderid" Display="Dynamic" ErrorMessage="CompareValidator" Operator="DataTypeCheck" SetFocusOnError="True" Type="Integer">必須是整數</asp:CompareValidator> </div> <div style="height:450px"> <asp:Repeater ID="rpRuleList" runat="server"> <HeaderTemplate> <table width="100%" border="1" cellspacing="0" cellpadding="4" style="border-collapse: collapse" id="list"> <tr> <th style="width: 5%"> 序號 </th> <th style="width: 10%"> 訂單編號 </th> <th style="width: 15%"> 訂單日期 </th> <th style="width: 30%"> 公司名稱 </th> <th style="width: 20%"> 客戶編號 </th> <th style="width: 20%"> 雇員姓名 </th> </tr> </HeaderTemplate> <ItemTemplate> <tr onmouseover="CgColor('over',this)" onmouseout="CgColor('out',this)" onclick="CgColor('click',this)"> <td> <%#Eval("rowNumber")%> </td> <td> <%#Eval("orderid")%> </td> <td> <%#Eval("orderdate","{0:d}")%> </td> <td> <%#Eval("companyname")%> </td> <td> <%#Eval("customerid")%> </td> <td> <%#Eval("employeename")%> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> </div> <webdiyer:AspNetPager ID="AspNetPager1" runat="server" PageSize="15" OnPageChanged="AspNetPager1_PageChanged" CssClass="cssPager" FirstPageText="首頁" LastPageText="尾頁" PrevPageText="上頁" NextPageText="下頁" HorizontalAlign="left" > </webdiyer:AspNetPager> </ContentTemplate> </asp:UpdatePanel> </div> </form> </body> </html>
(3)CS代碼
CS代碼
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; namespace WebDiyer { public partial class Demo : System.Web.UI.Page { #region string count;//用於記錄記錄集條數 const string vsKey = " "; //ViewState key protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { searchOrders(string.Empty); } } protected void btn_search_Click(object sender, EventArgs e) { AspNetPager1.CurrentPageIndex = 1; btn_all.Enabled = true; string s = " orderid " + DropDownList1.SelectedValue + tb_orderid.Text; ViewState[vsKey] = s; searchOrders(s); } void searchOrders(string sWhere) { string pageIndex = (AspNetPager1.CurrentPageIndex ).ToString();//當前頁碼 DataTable dt = Common.DB.GetPage("V_Orders", "orderid,orderdate,customerid,CompanyName,EmployeeName ", pageIndex, sWhere, "orderid desc", "15", out count); AspNetPager1.RecordCount =Convert.ToInt32(count); rpRuleList.DataSource = dt; rpRuleList.DataBind(); } protected void AspNetPager1_PageChanged(object src, EventArgs e) { searchOrders((string)ViewState[vsKey]); } protected void btn_all_Click(object sender, EventArgs e) { ViewState[vsKey] = null; btn_all.Enabled = false; AspNetPager1.CurrentPageIndex = 1; searchOrders(null); } #endregion } }
(4)涉及到的存儲過程
涉及到的分頁存儲過程
ALTER procedure [dbo].[GetPage] @tblName varchar(1000), -- 表名(必要參數) @Fields varchar(1000)='*', --要返回的列,要保證沒有名稱的列有別名 @PageSize int = 25, -- 頁尺寸 @PageIndex int = 1, -- 頁碼 @OrderType varchar(50) = '', -- 設置排序類型,不要加order by @strWhere varchar(2000) = '' -- 查詢條件 (注意: 不要加 where) as BEGIN declare @Mycount varchar(2000)---此變量存儲SQL語句,用於獲得符合條件的記錄總數 declare @strSql varchar(2000)----此變量存儲SQL語句,用於獲得符合條件的記錄 if @OrderType='' set @OrderType='getdate()' if(@strWhere='') begin set @Mycount='select count(*) from '+@tblName set @strsql='select * from (select top ('+cast(@PageSize*@PageIndex as varchar(10))+') ROW_NUMBER()over(order by '+@OrderType+') rowNumber,'+@Fields+' from '+@tblName+') t where rowNumber>'+cast((@PageIndex-1)*@PageSize as varchar(10)) end else begin set @Mycount='select count(*) from '+@tblName+' where '+@strWhere set @strsql='select * from (select top ('+cast(@PageSize*@PageIndex as varchar(10))+') ROW_NUMBER()over(order by '+@OrderType+') rowNumber,'+@Fields+' from '+@tblName+' where '+@strWhere+') t where rowNumber>'+cast((@PageIndex-1)*@PageSize as varchar(10)) end exec(@strSql) exec(@Mycount) END
到此一個基本的分頁功能就完成了
