前一篇文章是采用存儲過程來進(jìn)行分頁的,但是存在缺陷,沒有代碼重用,針對不同的表或者不同的視圖都需要去編寫存儲過程,這樣很麻煩,代碼的重用性很差。本文將通過一個用戶控件來實(shí)現(xiàn)數(shù)據(jù)分頁的頁面層以達(dá)到代碼重用的目的。
分頁是借助用戶自定義控件來實(shí)現(xiàn),在這里主要有以下兩種方法來實(shí)現(xiàn):
(一).吳旗娃的AspNetPager組件(推薦使用)
首先,下載該dll文件。下載地址:
AspNetPager分頁控件在工具箱中,鼠標(biāo)右鍵,“選擇項(xiàng)”,添加剛下載的dll文件。
然后,將會在工具箱中看到一個AspNetPager分頁控件,拖到頁面,再拖一個數(shù)據(jù)顯示控件,Gridview或Repeater。
最后,寫后臺代碼如下:
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ù)庫
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分頁控件如何用
DataView dv = ds.Tables[0].DefaultView;
//使用PagedDataSource類
PagedDataSource pds = new PagedDataSource();
AspNetPager1.RecordCount = dv.Count;//取得記錄總數(shù)
pds.DataSource = dv;
pds.AllowPaging = true;
//取得當(dāng)前頁的索引
pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;
pds.PageSize = AspNetPager1.PageSize;//取得每頁顯示的記錄數(shù)
GridView1.DataSource = pds; //指定數(shù)據(jù)源
GridView1.DataBind();
}
protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
BindData();
}
}
就這么簡單幾步就OK啦,那么我們?nèi)绾螢锳spNetPager分頁控件定義及應(yīng)用樣式。很簡單,如下
在源中的<style type="text/css"></style>中添加下列樣式,再在AspNetPager分頁控件后面添加屬性即可。
(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"
(二).張子陽的Asp.Net 可擴(kuò)展分頁用戶控件
此用法實(shí)現(xiàn)起來比較復(fù)雜,沒有上面的簡單,它采用的控件思想是:
它是基于Http的Request請求,獲取Url參數(shù)進(jìn)行分頁的;而不是集于Http的Post請求,獲取隱藏的表單數(shù)據(jù)項(xiàng)來進(jìn)行分頁的。
感興趣的朋友可以參考:
http://www.tracefact.net/asp-net/Extensible-Paging-User-Control.aspx總結(jié)如下,第一種控件是采用PostBack分頁的,第二種控件是采用URL分頁的,兩者各有千秋,但是
AspNetPager除提供默認(rèn)的類似于DataGrid和GridView的PostBack分頁方式外,還支持通過Url進(jìn)行分頁,象大多數(shù)asp程序中分頁一樣, Url分頁方式允許用戶通過在瀏覽器地址欄中輸入相應(yīng)的地址即可直接進(jìn)入指定頁面,也可以使搜索引擎搜索到所有分頁的頁面的內(nèi)容,因此具有用戶友好和搜索引擎友好的優(yōu)點(diǎn),關(guān)于Url分頁與PostBack分頁方式的差異,請參照下表:
PostBack分頁與Url分頁比較
PostBack分頁
Url分頁
分頁方式
通過頁面回發(fā)來傳遞分頁信息。
通過跳轉(zhuǎn)到指定的Url來傳遞分頁信息。
分頁性能
可以將所有分頁信息保存在ViewState中,如在頁面初次加載時(shí)獲取要分頁的記錄的總數(shù),其后無需再次訪問數(shù)據(jù)庫獲取該值,而可以從回發(fā)后的ViewState中獲取,減少了數(shù)據(jù)庫訪問次數(shù),提高了分頁的速度。
每次分頁時(shí)頁面都被重新初始化,除通過Url傳遞的當(dāng)前頁索引外所有分頁的數(shù)據(jù)都得重新獲取,如每次分頁都得從數(shù)據(jù)庫獲取所有要分頁的記錄的總數(shù),因此速度較PostBack分頁方式稍差,但可以通過將記錄總數(shù)保存在Cache或Session中來達(dá)到與PostBack分頁一樣的分頁性能。
靈活性
訪問者可以動態(tài)改變分頁屬性,回發(fā)后仍可以保持改變后的屬性值。
可以動態(tài)改變屬性,但頁面跳轉(zhuǎn)后不會保留改變的屬性值,而恢復(fù)為初始值。
直接訪問
訪問者無法通過輸入U(xiǎn)rl訪問除第一頁外的其它頁面。
訪問者可以通過輸入相應(yīng)頁面的Url訪問任一頁。
搜索引擎友好
搜索引擎只能檢索第一頁。
搜索引擎可以檢索所有頁。
感謝你閱讀本文,希望這篇文章給你帶來幫助!