通用asp.net數(shù)據(jù)分頁控件
對(duì)于幾乎所有的數(shù)據(jù)表現(xiàn)web應(yīng)用來說,組織好數(shù)據(jù)的顯示方式、避免給用戶帶來混亂的感覺就是最主 要的目標(biāo)之一。每個(gè)頁面顯示20條記錄當(dāng)然是可以接受的,但每頁顯示10000條記錄就很容易給用戶帶來不便了。將數(shù)據(jù)分成多個(gè)頁面顯示,即對(duì)數(shù)據(jù)進(jìn)行分 頁,是解決此類問題的最常見的辦法。
一、慨述
asp.net本身只提供了一個(gè)支持?jǐn)?shù)據(jù)分頁的控件,即 datagrid分頁控件,不過它比較適合intranet環(huán)境使用,對(duì)于internet環(huán)境來說,datagrid分頁控件提供的功能似乎不足以構(gòu)造 出靈活的web應(yīng)用。其中一個(gè)原因是,datagrid控件對(duì)web設(shè)計(jì)者放置分頁控件的位置和分頁控件的外觀都有限制,例如,datagrid控件不允 許垂直放置分頁控件。另一個(gè)能夠發(fā)揮分頁技術(shù)優(yōu)勢(shì)的控件是repeater,者可以利用repeater控件快速配置數(shù)據(jù)的顯示方式,但分頁功 能卻需要開發(fā)者自己實(shí)現(xiàn)。數(shù)據(jù)源在不斷地變化,數(shù)據(jù)表現(xiàn)方式也千差萬別,如果針對(duì)這些不斷變動(dòng)的條件分別定制分頁控件,顯然太浪費(fèi)時(shí)間了,構(gòu)造一個(gè)不限于 特定表現(xiàn)控件的通用分頁控件將極大地有利于節(jié)省時(shí)間。
一個(gè)優(yōu)秀的通用數(shù)據(jù)控件不僅提供常規(guī)的分頁功能,而且還要能夠:
⑴ 提供“首頁”、“上一頁”、“下一頁”、“末頁”分頁導(dǎo)航按鈕。
⑵ 根據(jù)數(shù)據(jù)顯示情況調(diào)整自身的狀態(tài),即具有數(shù)據(jù)敏感性。如果分頁控件被設(shè)置成每頁顯示10個(gè)記錄,但實(shí)際上只有9個(gè)記錄,那么分頁控件不應(yīng)該顯示出來;在數(shù) 據(jù)分成多頁顯示的情況下,第一個(gè)頁面的“首頁”、“上一頁”按鈕不應(yīng)顯示出來,最后一個(gè)頁面的“下一頁”、“末頁”按鈕也不應(yīng)該顯示出來。
⑶ 不能依賴于特定的數(shù)據(jù)顯示控件。
⑷ 具有適應(yīng)各種現(xiàn)有、將有數(shù)據(jù)源的能力。
⑸ 應(yīng)當(dāng)能夠方便地配置顯示方式,輕松地集成到各種應(yīng)用之中。
⑹ 當(dāng)分頁就緒時(shí),提醒其他控件。
⑺ 即使是缺乏經(jīng)驗(yàn)的web設(shè)計(jì)者,也要能夠毫無困難地使用。
⑻ 提供有關(guān)分頁信息的屬性數(shù)據(jù)。
目前市場(chǎng)上已經(jīng)有一些提供上述功能的商業(yè)性控件,不過都價(jià)格不菲。對(duì)于許多開發(fā)者來說,自己構(gòu)造一個(gè)通用的分頁控件是最理想的選擇。
圖一顯示了本文通用分頁控件的運(yùn)行界面,其中用于顯示的控件是一個(gè)repeater控件。分頁控件由兩類部件構(gòu)成:四個(gè)導(dǎo)航按鈕,一組頁面編號(hào)鏈接。
用戶可以方便地改換顯示控件、改變分頁控件本身的外觀。例如,在圖一中,和分頁控件協(xié)作的顯示控件可發(fā)換成一個(gè)datagrid控件,頁面編號(hào)鏈接和四個(gè)導(dǎo)航按鈕分兩行顯示。
asp.net 支持創(chuàng)建定制web控件的三種方式:用戶控件,復(fù)合控件,自定義控件。第三種控件即自定義控件的名稱很容易引起誤解。實(shí)際上,所有這三種控件都應(yīng)該算是自 定義控件。復(fù)合控件和微軟所謂的自定義控件的不同之處在于,前者要用到createchildcontrols()方法, createchildcontrols()方法允許控件根據(jù)某些事件重新繪制自身。對(duì)于本文的通用分頁器,我們將使用復(fù)合控件。
下面的uml序列圖概括了通用分頁控件的一般機(jī)制。 
雖然我們的目標(biāo)是讓通用分頁控件不依賴于表現(xiàn)數(shù)據(jù)的控件,但很顯然,總得有某種方法讓分頁控件訪問數(shù)據(jù)。每一個(gè)從control類繼承的控件都提供一個(gè) databinding事件。我們把分頁器本身注冊(cè)成databinding事件的監(jiān)聽器,分頁器就可以獲知數(shù)據(jù)的情況并修改數(shù)據(jù)。由于所有從 control類繼承的控件都有這個(gè)databinding事件,所以分頁器控件達(dá)到了不依賴于特定數(shù)據(jù)表現(xiàn)控件的目標(biāo)——換句話說,分頁器控件可以綁定 到所有從control類派生的控件,即它能夠綁定到幾乎所有的web控件。
新聞熱點(diǎn)
疑難解答
圖片精選