楊毅
摘 要:本文提出了一種控制Repeater控件中數(shù)據(jù)分頁(yè)顯示的新方法,可以自由控制分頁(yè)控件的內(nèi)容和格式。為了進(jìn)一步方便使用,把此方法封裝到自定義類中,只需要在Web頁(yè)面中定義一個(gè)Repeater和一個(gè)Div控件,然后給出四個(gè)簡(jiǎn)單的參數(shù)去調(diào)用本方法,就可以完美地實(shí)現(xiàn)分頁(yè)顯示數(shù)據(jù)。
關(guān)鍵詞:Repeater Div 分頁(yè) 類 方法
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2014)03(a)-0017-02
當(dāng)一個(gè)網(wǎng)頁(yè)顯示數(shù)據(jù)記錄太多時(shí),既不美觀也不方便,此時(shí)就需要對(duì)數(shù)據(jù)進(jìn)行分頁(yè)顯示。早期,程序員曾使用手工方式控制SQL查詢命令來(lái)實(shí)現(xiàn)分頁(yè)顯示大量的數(shù)據(jù)。后來(lái),開始出現(xiàn)一些現(xiàn)成的分頁(yè)控件[1,5],但一般都是比較死板,程序員只能機(jī)械地調(diào)用,很難對(duì)其實(shí)現(xiàn)隨意增、刪和調(diào)整。針對(duì)以上情況,許多新的分頁(yè)技術(shù)[2~4]開始出現(xiàn),一些程序員開始發(fā)布自己的技術(shù)源代碼,在網(wǎng)絡(luò)上共享自己的創(chuàng)新,進(jìn)一步激發(fā)了這一技術(shù)的發(fā)展。
縱觀眾多的分頁(yè)技術(shù),即使引用別人的源代碼,都很難實(shí)現(xiàn)直接引用。本文提出一種新方法,程序員在前臺(tái)界面定義一個(gè)顯示數(shù)據(jù)的Repeater控件,在Repeater控件的尾部定義一個(gè)顯示分頁(yè)功能的Div層,然后把這兩個(gè)控件和查詢數(shù)據(jù)的SQL命令串作為參數(shù)傳遞給自定義類中的方法,從而實(shí)現(xiàn)分頁(yè)技術(shù)的模塊化。
1 技術(shù)準(zhǔn)備及思路
本應(yīng)用選用C#.net語(yǔ)言,使用VS.Net 2008中的Repeater控件和Div控件[5]。在項(xiàng)目中自定義一個(gè)類,在類中定義一個(gè)“page( )”方法,主要實(shí)現(xiàn)以下功能:
(1)連接數(shù)據(jù)庫(kù),查詢出所要顯示的數(shù)據(jù),并保存到一個(gè)DataSet中;(2)在div中動(dòng)態(tài)生成各種控制分頁(yè)的控件,如“上一頁(yè)、下一頁(yè)”等(程序員可以根據(jù)自己的需要來(lái)生成各種控件);(3)定義PagedDataSource控件,接收DataSet中的數(shù)據(jù),設(shè)置Paged DataSource控件分頁(yè)屬性;(4)使用div中的分頁(yè)控件來(lái)傳遞需要顯示的頁(yè)碼,并把頁(yè)碼傳遞給PagedDataSource;(5)把PagedDataSource綁定到Repeater,顯示分頁(yè)后的數(shù)據(jù)記錄。
當(dāng)需要分頁(yè)顯示數(shù)據(jù)時(shí),程序員只需要把Repeater和Div控件的ID傳遞給page( )方法即可。
2 編碼實(shí)施及結(jié)果
2.1 定義類和方法
本處省略了數(shù)據(jù)庫(kù)連接和打開操作的代碼,僅給出類和方法的核心部分。
public class Paging
{ public HtmlControl div11;
public void page(Repeater Repeater1, string sql, int pagesize, HtmlControl div)
{ div11 = div;
DataTable dt = ds.Tables[0]; //把查詢的數(shù)據(jù)填充到一個(gè)DataSet類的ds中
HyperLink firtp = new HyperLink(); firtp.Text = "首頁(yè)"; //動(dòng)態(tài)生成各分頁(yè)控件
HyperLink prep = new HyperLink(); prep.Text="上一頁(yè)";
HyperLink nextp=new HyperLink(); nextp.Text="下一頁(yè)";
HyperLink lastp= new HyperLink(); lastp.Text="尾頁(yè)";
TextBox TextBox1yy = new TextBox();TextBox1yy.ID="TextBox1yy";
TextBox1yy.Attributes.Add("runat", "server");
Button Button1yy=new Button(); Button1yy.Text="跳轉(zhuǎn)";//定義任意頁(yè)跳轉(zhuǎn)按鈕
Button1yy.Click+=new System.EventHandler(Button1yy_Click);
div11.Controls.Add(firtp); div11.Controls.Add(prep);
div11.Controls.Add(nextp); div11.Controls.Add(lastp);
div11.Controls.Add(TextBox1yy); div11.Controls.Add(Button1yy);
PagedDataSource pds=new PagedDataSource(); //生成一個(gè)PagedDataSource控件
pds.DataSource=dt.DefaultView;
pds.AllowPaging=true; pds.PageSize=pagesize;//指定每頁(yè)行數(shù)
int totalp=(dt.Rows.Count+pds.PageSize-1)/pds.PageSize;//得出總行數(shù)
Label1yy.Text="總頁(yè)數(shù)為:"+ Convert.ToString(totalp);
int curpage;//當(dāng)前頁(yè)
if(Request.QueryString["Page"] != null)
curpage=Convert.ToInt32(HttpContext.Current.Request.QueryString["Page"]);endprint
else curpage=1;
pds.CurrentPageIndex=curpage-1;
if (!pds.IsFirstPage)
prep.NavigateUrl=HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(curpage - 1);
if (!pds.IsLastPage)
nextp.NavigateUrl=HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(curpage + 1);
Repeater1.DataSource=pds;Repeater1.DataBind();//把pds綁定到Repeater1
if (curpage!=1)//控制首頁(yè)
firtp.NavigateUrl=HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=1";
if (curpage !=totalp)//控制尾頁(yè)
lastp.NavigateUrl=HttpContext.Current.Request.CurrentExecutionFilePath + "?Page="+Convert.ToString(totalp);
}
protected void Button1yy_Click(object sender,EventArgs e)//“跳轉(zhuǎn)”按鈕功能實(shí)現(xiàn)
{ TextBox ppp=(TextBox)this.div11.FindControl("TextBox1yy");
string p=ppp.Text.Trim(); HttpContext.Current.Response.Redirect(HttpContext.Current.Request.CurrentExecutionFilePath+"?Page="+p);
} }
程序員可以根據(jù)實(shí)際需要,在div中生成滿足自己要求的分頁(yè)控件,分別設(shè)置其屬性,以達(dá)到美化和協(xié)調(diào)的目的。
2.2 定義前臺(tái)和調(diào)用方法
在Web頁(yè)面前臺(tái)定義一個(gè)Repeater控件,同時(shí)完成表格頭的定義,把各列綁定到要顯示的數(shù)據(jù)字段上。在Repeater控件的尾部定義一個(gè)Div層,取名為“divpaging”。在相應(yīng)的后臺(tái)cs代碼中調(diào)用方法“new Paging().page(Repeater1,sql,5,divpaging)”。其中,“sql”是數(shù)據(jù)庫(kù)的SQL查詢命令串,“pagesize”為一頁(yè)顯示的數(shù)據(jù)記錄數(shù)目,“div”是顯示分頁(yè)控件的容器。
根據(jù)本算法,編寫代碼,測(cè)試結(jié)果如圖1所示。
當(dāng)多個(gè)網(wǎng)頁(yè)需要使用本技術(shù)時(shí),只需要在前臺(tái)快速地定義好Repeater和div控件,就可以直接調(diào)用本方法。從實(shí)驗(yàn)結(jié)果看,基本上實(shí)現(xiàn)了目前流行的分頁(yè)功能。
3 結(jié)論
經(jīng)過實(shí)驗(yàn)得知,此方法的優(yōu)點(diǎn)在于,程序員可以隨意定義和調(diào)整分頁(yè)功能模塊,只需要定義前臺(tái)界面的控件,復(fù)用本技術(shù)就可以實(shí)現(xiàn)多個(gè)網(wǎng)頁(yè)顯示風(fēng)格的統(tǒng)一,大大提升分頁(yè)顯示的效率。
參考文獻(xiàn)
[1] 李兵,劉淑芬.海量數(shù)據(jù)下的Web分頁(yè)呈現(xiàn)研究[J].吉林大學(xué)學(xué)院:信息科學(xué)版,2005,23(5):518-521.
[2] 鄭平.基于Web的分而技術(shù)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2011,1(1):45-46.
[3] 高文鵬.Java Web分頁(yè)技術(shù)與實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2010,8(3):80-82.
[4] 董一華.基于ASP.NET緩存與分頁(yè)策略優(yōu)化Web數(shù)據(jù)查詢性能[J].計(jì)算機(jī)時(shí)代,2006,1(9):8-10.
[5] 金雪云,陳建偉,等.Visual C#2008程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2011:2-7.endprint