前一篇文章是采用存儲(chǔ)過(guò)程來(lái)進(jìn)行分頁(yè)的,但是存在缺陷,沒(méi)有代碼重用,針對(duì)不同的表或者不同的視圖都需要去編寫存儲(chǔ)過(guò)程,這樣很麻煩,代碼的重用性很差。本文將通過(guò)一個(gè)用戶控件來(lái)實(shí)現(xiàn)數(shù)據(jù)分頁(yè)的頁(yè)面層以達(dá)到代碼重用的目的。
分頁(yè)是借助用戶自定義控件來(lái)實(shí)現(xiàn),在這里主要有以下兩種方法來(lái)實(shí)現(xiàn):
(一).吳旗娃的AspNetPager組件(推薦使用)
首先,下載該dll文件。下載地址:
AspNetPager分頁(yè)控件在工具箱中,鼠標(biāo)右鍵,“選擇項(xiàng)”,添加剛下載的dll文件。
然后,將會(huì)在工具箱中看到一個(gè)AspNetPager分頁(yè)控件,拖到頁(yè)面,再拖一個(gè)數(shù)據(jù)顯示控件,Gridview或Repeater。
最后,寫后臺(tái)代碼如下:
using System;
using System.Data;
using System.Configuration;
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;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
//獲取并綁定數(shù)據(jù)
public void BindData()
{
//連接數(shù)據(jù)庫(kù)
string strCon = "server=.;database=Northwind;uid=sa;pwd=";
SqlConnection con = new SqlConnection(strCon);
string sql = "select * from Customers";
SqlDataAdapter sda = new SqlDataAdapter(sql,con);
DataSet ds = new DataSet();
sda.Fill(ds);
//AspNetPager分頁(yè)控件如何用
DataView dv = ds.Tables[0].DefaultView;
//使用PagedDataSource類
PagedDataSource pds = new PagedDataSource();
AspNetPager1.RecordCount = dv.Count;//取得記錄總數(shù)
pds.DataSource = dv;
pds.AllowPaging = true;
//取得當(dāng)前頁(yè)的索引
pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;
pds.PageSize = AspNetPager1.PageSize;//取得每頁(yè)顯示的記錄數(shù)
GridView1.DataSource = pds; //指定數(shù)據(jù)源
GridView1.DataBind();
}
protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
BindData();
}
}
就這么簡(jiǎn)單幾步就OK啦,那么我們?nèi)绾螢锳spNetPager分頁(yè)控件定義及應(yīng)用樣式。很簡(jiǎn)單,如下
在源中的<style type="text/css"></style>中添加下列樣式,再在AspNetPager分頁(yè)控件后面添加屬性即可。
(1).網(wǎng)易風(fēng)格:
CSS樣式:
.anpager .cpb {background:#1F3A87 none repeat scroll 0 0;border:1px solid #CCCCCC;color:#FFFFFF;font-weight:bold;margin:5px 4px 0 0;padding:4px 5px 0;}
.anpager a {background:#FFFFFF none repeat scroll 0 0;border:1px solid #CCCCCC;color:#1F3A87;margin:5px 4px 0 0;padding:4px 5px 0;text-decoration:none}
.anpager a:hover{background:#1F3A87 none repeat scroll 0 0;border:1px solid #1F3A87;color:#FFFFFF;}
屬性設(shè)置:CssClass="anpager" CurrentPageButtonClass="cpb"
(2).拍拍網(wǎng)風(fēng)格:
CSS樣式:
.paginator { font: 11px Arial, Helvetica, sans-serif;padding:10px 20px 10px 0; margin: 0px;}
.paginator a {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;margin-right:2px}
.paginator a:visited {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;}
.paginator .cpb {padding: 1px 6px;font-weight: bold; font-size: 13px;border:none}
.paginator a:hover {color: #fff; background: #ffa501;border-color:#ffa501;text-decoration: none;}
屬性設(shè)置:CssClass="paginator" CurrentPageButtonClass="cpb"
(3).迅雷風(fēng)格:
CSS樣式:
.pages { color: #999; }
.pages a, .pages .cpb { text-decoration:none;float: left; padding: 0 5px; border: 1px solid #ddd;background: #ffff;margin:0 2px; font-size:11px; color:#000;}
.pages a:hover { background-color: #E61636; color:#fff;border:1px solid #E61636; text-decoration:none;}
.pages .cpb { font-weight: bold; color: #fff; background: #E61636; border:1px solid #E61636;}
屬性設(shè)置:CssClass="pages" CurrentPageButtonClass="cpb"
(二).張子陽(yáng)的Asp.Net 可擴(kuò)展分頁(yè)用戶控件
此用法實(shí)現(xiàn)起來(lái)比較復(fù)雜,沒(méi)有上面的簡(jiǎn)單,它采用的控件思想是:
它是基于Http的Request請(qǐng)求,獲取Url參數(shù)進(jìn)行分頁(yè)的;而不是集于Http的Post請(qǐng)求,獲取隱藏的表單數(shù)據(jù)項(xiàng)來(lái)進(jìn)行分頁(yè)的。
感興趣的朋友可以參考:
http://www.tracefact.net/asp-net/Extensible-Paging-User-Control.aspx總結(jié)如下,第一種控件是采用PostBack分頁(yè)的,第二種控件是采用URL分頁(yè)的,兩者各有千秋,但是
AspNetPager除提供默認(rèn)的類似于DataGrid和GridView的PostBack分頁(yè)方式外,還支持通過(guò)Url進(jìn)行分頁(yè),象大多數(shù)asp程序中分頁(yè)一樣, Url分頁(yè)方式允許用戶通過(guò)在瀏覽器地址欄中輸入相應(yīng)的地址即可直接進(jìn)入指定頁(yè)面,也可以使搜索引擎搜索到所有分頁(yè)的頁(yè)面的內(nèi)容,因此具有用戶友好和搜索引擎友好的優(yōu)點(diǎn),關(guān)于Url分頁(yè)與PostBack分頁(yè)方式的差異,請(qǐng)參照下表:
PostBack分頁(yè)與Url分頁(yè)比較
PostBack分頁(yè)
Url分頁(yè)
分頁(yè)方式
通過(guò)頁(yè)面回發(fā)來(lái)傳遞分頁(yè)信息。
通過(guò)跳轉(zhuǎn)到指定的Url來(lái)傳遞分頁(yè)信息。
分頁(yè)性能
可以將所有分頁(yè)信息保存在ViewState中,如在頁(yè)面初次加載時(shí)獲取要分頁(yè)的記錄的總數(shù),其后無(wú)需再次訪問(wèn)數(shù)據(jù)庫(kù)獲取該值,而可以從回發(fā)后的ViewState中獲取,減少了數(shù)據(jù)庫(kù)訪問(wèn)次數(shù),提高了分頁(yè)的速度。
每次分頁(yè)時(shí)頁(yè)面都被重新初始化,除通過(guò)Url傳遞的當(dāng)前頁(yè)索引外所有分頁(yè)的數(shù)據(jù)都得重新獲取,如每次分頁(yè)都得從數(shù)據(jù)庫(kù)獲取所有要分頁(yè)的記錄的總數(shù),因此速度較PostBack分頁(yè)方式稍差,但可以通過(guò)將記錄總數(shù)保存在Cache或Session中來(lái)達(dá)到與PostBack分頁(yè)一樣的分頁(yè)性能。
靈活性
訪問(wèn)者可以動(dòng)態(tài)改變分頁(yè)屬性,回發(fā)后仍可以保持改變后的屬性值。
可以動(dòng)態(tài)改變屬性,但頁(yè)面跳轉(zhuǎn)后不會(huì)保留改變的屬性值,而恢復(fù)為初始值。
直接訪問(wèn)
訪問(wèn)者無(wú)法通過(guò)輸入U(xiǎn)rl訪問(wèn)除第一頁(yè)外的其它頁(yè)面。
訪問(wèn)者可以通過(guò)輸入相應(yīng)頁(yè)面的Url訪問(wèn)任一頁(yè)。
搜索引擎友好
搜索引擎只能檢索第一頁(yè)。
搜索引擎可以檢索所有頁(yè)。
感謝你閱讀本文,希望這篇文章給你帶來(lái)幫助!