国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于ASP.NET數(shù)據(jù)分頁(yè)導(dǎo)航的設(shè)計(jì)與應(yīng)用

2016-01-24 11:44袁芳
軟件 2015年12期

摘要:在ASP.NET動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)過(guò)程中,數(shù)據(jù)分頁(yè)是經(jīng)常使用的一種技術(shù),但DataList和Rep eater控件沒(méi)有內(nèi)置分頁(yè)功能,需要編寫(xiě)分頁(yè)代碼,而這些分頁(yè)代碼大致相同。本文針對(duì)GridView、DataList和Repeater數(shù)據(jù)綁定控件,設(shè)計(jì)了分頁(yè)導(dǎo)航用戶(hù)控件,從而解決了網(wǎng)頁(yè)開(kāi)發(fā)過(guò)程中大量分頁(yè)代碼重復(fù)的問(wèn)題,提高網(wǎng)站開(kāi)發(fā)效率。

關(guān)鍵詞:分頁(yè)技術(shù);用戶(hù)控件;APS.NET

中圖分類(lèi)號(hào):TP391

文獻(xiàn)標(biāo)識(shí)碼:A

DOI:10.3969/j.issn.1003-6970.2015.12.013

本文著錄格式:袁芳基于ASP.NET數(shù)據(jù)分頁(yè)導(dǎo)航的設(shè)計(jì)與應(yīng)用[J]軟件,2015,36(12):60-62

1 引言

隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)與互聯(lián)網(wǎng)的發(fā)展與應(yīng)用,人們?cè)絹?lái)越離不開(kāi)網(wǎng)絡(luò),上網(wǎng)瀏覽新聞、網(wǎng)購(gòu)、搜索信息、發(fā)帖子等活動(dòng)已成了我們生活的一部分,從而使得網(wǎng)站數(shù)據(jù)庫(kù)中的數(shù)據(jù)量呈現(xiàn)指數(shù)級(jí)增長(zhǎng)。如果服務(wù)器端把用戶(hù)請(qǐng)求的數(shù)據(jù)全部以一個(gè)頁(yè)面發(fā)給客戶(hù)端的話(huà),由于數(shù)據(jù)量大,會(huì)增加頁(yè)面顯示時(shí)間和頁(yè)面的總長(zhǎng)度,這嚴(yán)重影響了用戶(hù)的體驗(yàn)。針對(duì)這些問(wèn)題,可以利用數(shù)據(jù)的分頁(yè)技術(shù)來(lái)解決。利用ASP.NET技術(shù),本文詳細(xì)介紹了對(duì)網(wǎng)頁(yè)數(shù)據(jù)分頁(yè)的一些技術(shù),并結(jié)合數(shù)據(jù)綁定控件的特點(diǎn),設(shè)計(jì)分頁(yè)導(dǎo)航的用戶(hù)控件進(jìn)行數(shù)據(jù)分頁(yè),從而提高網(wǎng)站開(kāi)發(fā)效率。

2 內(nèi)置分頁(yè)功能的數(shù)據(jù)綁定控件

網(wǎng)頁(yè)中數(shù)據(jù)訪問(wèn)的許多功能是由數(shù)據(jù)綁定控件來(lái)完成,ASP.NET有豐富的數(shù)據(jù)綁定控件,這是廣大網(wǎng)站開(kāi)發(fā)人員樂(lè)于使用ASP.NET進(jìn)行網(wǎng)站開(kāi)發(fā)的一個(gè)重要原因。ASP.NET3.5中提供了GridView、DataList、Reapeater、ListView等數(shù)據(jù)綁定控件,其中具有內(nèi)置分頁(yè)功能的有GridView控件、ListView控件和DetailsView控件,由于DetailsView控件每頁(yè)只顯示一條記錄信息,本文就不做介紹。

2.1 GridView控件分頁(yè)

GridView控件是以表格的形式顯示數(shù)據(jù)源的數(shù)據(jù)。它有內(nèi)置分頁(yè)的功能,即該控件可以在不編寫(xiě)任何代碼,僅僅設(shè)置相關(guān)屬性情況下,就可以實(shí)現(xiàn)數(shù)據(jù)綁定和分頁(yè)等功能。GridView控件要實(shí)現(xiàn)分頁(yè)功能只需設(shè)置AllowPaging屬性值為T(mén)rue,如果要指定每頁(yè)顯示的記錄數(shù),可以設(shè)置PageSize屬性,默認(rèn)該屬性值為10條,分頁(yè)效果可以在屬性集合PagerSettings中進(jìn)行設(shè)置。使用GridView內(nèi)置分頁(yè)功能實(shí)現(xiàn)數(shù)據(jù)分頁(yè),操作簡(jiǎn)單,降低了網(wǎng)站開(kāi)發(fā)難度,提高了開(kāi)發(fā)效率,但需一次性將數(shù)據(jù)表中滿(mǎn)足條件的所有記錄讀入到內(nèi)存,大大占用服務(wù)器資源,降低了服務(wù)器性能。所以這種分頁(yè)方式適合數(shù)據(jù)量比較少的情況使用,當(dāng)數(shù)據(jù)量成千上萬(wàn)時(shí),就要編程分頁(yè),可以使用緩存技術(shù)、存儲(chǔ)過(guò)程白定義分頁(yè)等技術(shù)。

2.2 ListView控件與DataPager控件結(jié)合分頁(yè)

從ASP.NET3.5開(kāi)始,提供了全新的ListView控件和DataPager控件,結(jié)合使用這兩個(gè)控件就可以實(shí)現(xiàn)分頁(yè)顯示數(shù)據(jù)的功能。ListView控件用于顯示數(shù)據(jù),功能非常強(qiáng)大,它提供了編輯、刪除、插入、分頁(yè)與排序等數(shù)據(jù)操作功能和強(qiáng)大的顯示布局功能,同GridView控件類(lèi)似,與GridView控件不同之處在于比GridView控件多了插入功能和使用用戶(hù)定義的模板而不是行字段來(lái)顯示數(shù)據(jù)。ListView控件的分頁(yè)功能是通過(guò)DataPager控件來(lái)實(shí)現(xiàn)的。DataPager控件的PagedCountID屬性值為L(zhǎng)istView控件的ID值。DataPager控件擺放的位置可以是內(nèi)嵌在ListView控件的標(biāo)簽內(nèi),也可以是獨(dú)立于ListView控。但這種分頁(yè)樣式是就兩種,不夠靈活。

3 分頁(yè)導(dǎo)航用戶(hù)控件的設(shè)計(jì)與實(shí)現(xiàn)

在網(wǎng)站開(kāi)發(fā)過(guò)程中,對(duì)GridView、DataList和Repeater數(shù)據(jù)綁定控件使用的比較頻繁。當(dāng)數(shù)據(jù)量很多時(shí),就需要對(duì)數(shù)據(jù)進(jìn)行分頁(yè),GridView控件白帶了分頁(yè)功能,但分頁(yè)樣式卻差強(qiáng)人意。而DataList和Repeater控件在布局上可以靈活多變,但他們沒(méi)有分頁(yè)功能,只能由開(kāi)發(fā)者編寫(xiě)大量代碼手動(dòng)開(kāi)發(fā),涉及分頁(yè)數(shù)據(jù)的頁(yè)面都要編寫(xiě)分頁(yè)代碼,而這些分頁(yè)代碼大致是相同的,這會(huì)導(dǎo)致程序代碼重用率低,可維護(hù)性差和開(kāi)發(fā)速度慢等問(wèn)題。為了解決這些問(wèn)題,本文設(shè)計(jì)和開(kāi)發(fā)一個(gè)為這3個(gè)數(shù)據(jù)綁定控件都能使用的分頁(yè)導(dǎo)航用戶(hù)控件。

3.1 分頁(yè)導(dǎo)航用戶(hù)控件的界面設(shè)計(jì)

向網(wǎng)站項(xiàng)目中添加一個(gè)用戶(hù)控件,將它命名為UserDataPagerControl.ascx,用于數(shù)據(jù)分頁(yè)導(dǎo)航,在文件中添加7個(gè)控件,Label控件用于顯示當(dāng)前是第幾頁(yè)、共多少頁(yè),共多少條記錄,4個(gè)LinkButton控件用于翻頁(yè),定位到首頁(yè)、上一頁(yè)、下一頁(yè)和末頁(yè),DropDownList控件顯示共多少頁(yè)碼的列表,Button控件“跳轉(zhuǎn)”用于直接定位到DropDownList所選的頁(yè),設(shè)計(jì)如圖l所示。

3.2 分頁(yè)導(dǎo)航用戶(hù)控件的后臺(tái)代碼

首先為分頁(yè)導(dǎo)航控件創(chuàng)建幾個(gè)屬性,通過(guò)這些屬性可以設(shè)置數(shù)據(jù)所需的參數(shù),DataBindControIID屬性是存放分頁(yè)頁(yè)面中數(shù)據(jù)綁定控件的ID信息,PageNum屬性為每頁(yè)顯示數(shù)據(jù)的條數(shù),DataSQL屬性為查詢(xún)數(shù)據(jù)表的sql語(yǔ)句,在全局的地方創(chuàng)建一個(gè)靜態(tài)PageDataS ource分頁(yè)數(shù)據(jù)源的對(duì)象pds,白定義一個(gè)BindDatalnfo方法,該方法是用來(lái)從數(shù)據(jù)庫(kù)中查詢(xún)_LH符合指定條件的記錄,并將數(shù)據(jù)信息綁定到數(shù)據(jù)綁定控件中,其參數(shù)為當(dāng)前頁(yè)的索引值。在Page_Load事件中,第一次運(yùn)行時(shí),顯示第一頁(yè),頁(yè)面索引值為0,調(diào)用該方法,即if(!IsPostBack){BindDatalnfo(0);},BindDatalnfo方法的代碼如下所示。

private void BindDatalnfo(int currentpage){

string controltype=dataBindControIID.GetType().ToString();//controltype為數(shù)據(jù)綁定控件的類(lèi)型

controltype=controltype.Substring(controltype.LastlndexOf(“.”)+l,controltype.Length-l-cont roltype.LastlndexOf(“.”));

SqIConnection conn=new SqIConnection(Conf igurationManager.ConnectionStrings connD ataBase”].C onnectionString);

pds.AllowPaging=true;//允許分頁(yè)

pds.PageSize=pageNum;//每頁(yè)顯示數(shù)據(jù)條數(shù)

pds.CurrentPagelndex=currentpage;//currentpage為BindDatalnfo方法的參數(shù)值

conn.Open();//打開(kāi)數(shù)據(jù)庫(kù)連接

SqIDataAdapter sda=new SqIDataAdapter(sql,conn):

DataSet ds=new DataSet():

sda.Fill(ds);//手巴執(zhí)行得到的數(shù)據(jù)放在數(shù)據(jù)集中

pds.DataSource=ds.Tables[O].DefaultView;//把數(shù)據(jù)集中的數(shù)據(jù)放人分頁(yè)數(shù)據(jù)源中

LabCount.Text=“第”+(pds.CurrentPagelndex+l)+“頁(yè)共”+pds.PageCount+“頁(yè)共”+pds.DataSourceCount+“條記錄”;

//當(dāng)前頁(yè)為首頁(yè)時(shí),設(shè)置“首頁(yè)”、“上一頁(yè)”按鈕無(wú)效

if(pds.IsFirstPage){

lbtnFirst.Enabled=false;

lbtnPre.Enabled=false;}else{

lbtnFirst.Enabled=true;

lbtnPre.Enabled=true;}

//當(dāng)前頁(yè)為末頁(yè)時(shí),設(shè)置“末頁(yè)”、“下一頁(yè)”按鈕無(wú)效

if(pds.IsLastPage){

lbtnNext.Enabled=false:

lbtnLast.Enabled=false;}else{

lbtnNext.Enabled=true:

lbtnLast.Enabled=true;{

//給下拉列表控件添加頁(yè)碼值列表

if(!IsPostBack){

for(int i=1;i<=pds.PageCount;i++){

ddIPages.Items.Add(i.ToString());}}

ddIPages.Selectedlndex=pds.CurrentPagelndex;//下拉列表控件顯示當(dāng)前頁(yè)碼

//判斷頁(yè)面數(shù)據(jù)綁定控件的類(lèi)型,進(jìn)行相應(yīng)的數(shù)據(jù)綁定

if(controltype==“GridView”){

((GridView)(dataBindControIID)).DataSource=pds;

((GridView)(dataBindControIID)).DataBind();}

else if(controltype==“DataList”){

((DataList)(dataBindControIID)).DataSource=pds;

((DataList)(dataBindControIID)).DataBind();}

else{

((Repeater)(dataBindControIID)).DataSource=pds;

((Repeater)(dataBindControIID)).DataBind();}

conn.Close();}//關(guān)閉數(shù)據(jù)庫(kù)連接

在頁(yè)面定位時(shí),主要設(shè)計(jì)首頁(yè)、上一頁(yè)、下一頁(yè)、末頁(yè)和跳轉(zhuǎn)按鈕的單擊事件代碼的編寫(xiě),這些按鈕的代碼如下所述。在這5個(gè)按鈕的單擊事件中都定義一個(gè)整形int類(lèi)型的局部變量pagelndex,“首頁(yè)”按鈕單擊事件代碼中對(duì)pagelndex變量賦“0”值;“上一頁(yè)”單擊事件代碼中對(duì)pagelndex值為“pds.CurrentPagelndex-1”,“下一頁(yè)”單擊事件代碼中對(duì)pagelndex值為“pds.CurrentPagelndex+1”;“末頁(yè)”單擊事件代碼中對(duì)pagelndex值為“pds.PageCount-1”,跳轉(zhuǎn)按鈕的單擊事件代碼中pagelndex值為“Convert.ToInt32(ddIPages.Selectedltem.Text)-l”,這5個(gè)按鈕單擊事件代碼最后都寫(xiě)上調(diào)用白定義方法BindDatalnfo,代碼為“BindDatalnfo(pagelndex)”就可以完成翻頁(yè)和頁(yè)面的定位。

3.3 分頁(yè)導(dǎo)航用戶(hù)控件的應(yīng)用

當(dāng)分頁(yè)導(dǎo)航用戶(hù)白定義控件做好后,就可以像ASP.NET工具箱里控件一樣把UserDataPagerControl用戶(hù)控件拖到.aspx頁(yè)面中,下面以GridView和DataList數(shù)據(jù)綁定控件為類(lèi),可以輕松的完成數(shù)據(jù)分頁(yè),在頁(yè)面開(kāi)發(fā)過(guò)程中可以重復(fù)使用UserDataPagerControl用戶(hù)控件,從而大大提高開(kāi)發(fā)的效率。

在GridView控件的頁(yè)面Page_Load事件代碼中,設(shè)置分頁(yè)導(dǎo)航控件的屬性值,添加如下代碼,運(yùn)行效果如圖2所示

UserDataPagerControII.DataBindControIID=Gri dViewl:

UserDataPagerControII.DataSQL="select ID,Ti tle,Style,Type from tbNews";

UserDataPagerControll.PageNum=6;

在DataList控件的頁(yè)面Page_Load事件代碼中,設(shè)置分頁(yè)導(dǎo)航控件的屬性值,添加如下代碼.運(yùn)行效果如圖3所示。

UserDataPagerControll.DataBindControllD=Dat aListl:

UserDataPagerControll.DataSQL="select Book Name.BookAuthor.BookPrice.Booklinage from tbBooks":

UserDataPagerControll.PageNum=2;

4 總結(jié)

在Web應(yīng)用程序開(kāi)發(fā)中,數(shù)據(jù)分頁(yè)是經(jīng)常使用的一種技術(shù),也是提高數(shù)據(jù)訪問(wèn)性能和用戶(hù)體驗(yàn)的一主要手段。在動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)過(guò)程中,對(duì)GridView、Da taList和Repeater數(shù)據(jù)綁定控件使用頻率比較高,本文自定義了分頁(yè)導(dǎo)航用戶(hù)控件,該控件可以像工具箱里其它內(nèi)置控件一樣任意使用,適合對(duì)GridView、Da taList和Repeater數(shù)據(jù)綁定控件的數(shù)據(jù)進(jìn)行分頁(yè),從而解決了動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)過(guò)程中大量分頁(yè)代碼重復(fù)問(wèn)題,提高了代碼的重用率、網(wǎng)站的開(kāi)發(fā)效率和系統(tǒng)的可維護(hù)性。

石林| 高安市| 梅州市| 隆安县| 黄浦区| 油尖旺区| 凯里市| 肥东县| 海伦市| 内江市| 伊吾县| 兴安盟| 东方市| 开阳县| 白玉县| 邢台县| 静乐县| 调兵山市| 栖霞市| 农安县| 额济纳旗| 南投市| 阆中市| 霞浦县| 广宗县| 旺苍县| 广灵县| 巴中市| 连江县| 麻阳| 宜阳县| 藁城市| 潜江市| 桐梓县| 留坝县| 巨鹿县| 望奎县| 沂源县| 绥芬河市| 蒙城县| 漠河县|