如何擴(kuò)展ASP.NET GridView控件
本文詳細(xì)解釋如何擴(kuò)展ASP.NET GridView控件,同樣還將解釋了擴(kuò)展后的GridView控件所具有的新的重要特征:基于行的上下文菜單和GridViews行的過濾功能。
引言
本文將聚焦對(duì)擴(kuò)展ASP.NET GridView控件后的一系列新功能。其中本文介紹兩個(gè)主要特征:基于行的上下文菜單(Row_base ContextMenu)和基于過濾功能的GridView的行,在上周我曾經(jīng)介紹了GridView控件。
在我們自定義的GridView控件里,提供了幾個(gè)具有“高效率”功能的擴(kuò)展,不過,這些功能都不是GridView控件自帶的基本功能,正如您即將看到的,我們需要要重構(gòu)這些功能。 擴(kuò)展現(xiàn)在的GridView控件可以讓您更能夠控件常規(guī)GridView所沒有的功能,另外,擴(kuò)展該功能后,您以后就可以不斷重復(fù)的使用這些新特性。
我們準(zhǔn)備增加如下幾個(gè)特征:
1、行的單擊
2、行的雙擊
3、基于行的上下文菜單
4、頭元素的升序降序排列
5、當(dāng)頁(yè)面記錄樹木小于PageSize時(shí),修正GridView的高度
6、內(nèi)置的過濾文本框
7、內(nèi)置的復(fù)選框
除此以外,我們還將添加三個(gè)簡(jiǎn)單按鈕,可以利用他們?cè)诳蛻舳颂砑右恍┖?jiǎn)單的確認(rèn)函數(shù)
·確認(rèn)按鈕(Confirm Button)
·圖片按鈕(Confirm Image Button)
·鏈接按鈕(Confirm Link Button)
擴(kuò)展的XGrid控件需要從GridView控件派生,這也就說這個(gè)新的控件可以在ASP.NET2.0上運(yùn)行。
下面代碼顯示了擴(kuò)展后的的開始部分:
- namespace CustomControls
- {
- namespace Grid
- {
- [ToolboxData("〈 {0}:xGrid runat=server〉
- 〈 /{0}:xGrid〉")]
- public partial class xGrid : GridView
- {
要使用這個(gè)控件,只要簡(jiǎn)單的把它通過VS.NET2005的工具欄直接拖放到Web窗體上即可。具體怎把該控件添加VS.NET2005工具欄上則不是本文討論的范圍。
下面的代碼片斷顯示了它的基本使用
- 〈xGrid:xGrid ID="XGrid1" runat="server"
- AutoGenerateColumns="False" /〉
單擊(Single Row Click)
這是該自定義控件添加的第一個(gè)新特性,您現(xiàn)在把鼠標(biāo)放置到一行數(shù)據(jù)上然后單擊就會(huì)引起頁(yè)面數(shù)據(jù)的回發(fā),你可能認(rèn)為使用這個(gè)功能實(shí)現(xiàn)主/從頁(yè)面,是的,使用RowClick可以實(shí)現(xiàn)這個(gè)功能。
相關(guān)的屬性是:
·EnableRowClick:這個(gè)屬性可以取值為true/false,默認(rèn)為false
·MouseOverColor:當(dāng)EnableRowClick設(shè)置為true時(shí),利用該屬性設(shè)置鼠標(biāo)移過一行數(shù)據(jù)顯示的結(jié)果。單擊和雙擊都使用這個(gè)功能。
下圖顯示了運(yùn)行結(jié)果,在這個(gè)運(yùn)行結(jié)果里,顯示了單擊一行時(shí)的效果。
您可以在RowClick事件里處理單擊的結(jié)果,示意代碼如下:
- protected void XGrid1_RowClick(object sender,
- RowClickEventArgs e)
- {
- Response.Write("You clicked row: " + e.
- GridViewRow.RowIndex);
- }
RowClickEventArgs參數(shù)默認(rèn)是從EventArgs 類派生,并增加了一個(gè)名稱為GridViewRow 的屬性,這樣您就可以使用該屬性獲取當(dāng)前行的索引。
#p#
行的雙擊(Double Row Click)
這是擴(kuò)展ASP.NET GridView控件后添加的第二個(gè)功能。您現(xiàn)在只需要在一行上雙擊就會(huì)向服務(wù)器產(chǎn)生數(shù)據(jù)回發(fā)來處理請(qǐng)求。您可以通過雙擊讓當(dāng)前行處于編輯默認(rèn)。 在行的雙擊里已經(jīng)添加了RowDoubleClick事件,您可以使用該事件處理特定的業(yè)務(wù)邏輯
相關(guān)的屬性
EnableRowDoubleClick:取值為true或者false,默認(rèn)值為false
MouseOverColor:當(dāng)EnableRowDoubleClick設(shè)置為true時(shí),可以利用該屬性設(shè)置鼠標(biāo)移過行的效果,這個(gè)和單擊行的效果一樣。
下圖顯示了運(yùn)行結(jié)果
您可以處理RowDoubleClick 事件,示意代碼如下:
- protected void XGrid1_RowDoubleClick(object sender,
- RowDoubleClickEventArgs e)
- {
- Response.Write("You double clicked row: " + e.
- GridViewRow.RowIndex);
- }
RowDoubleClickEventArgs 類時(shí)從EventArgs 類派生并添加了GridViewRow 屬性,使用該屬性可以給你更全的控件
基于行的上下文菜單
我們花費(fèi)了一個(gè)半月左右的事件來研究GridView控件,但是我們發(fā)現(xiàn)沒有一個(gè)GridView控件可以使用ContextMenu,也就是說內(nèi)置的GridView上下文菜單控件無法使用。
我們不得不使用Dino Esposito開發(fā)的context meun,該菜單的開發(fā)文檔發(fā)布在MSDN雜志上,本文后面會(huì)在資料文件里列出對(duì)該文件的鏈接。 Dino Esposito開發(fā)的Context Menu主要使用ASP.NET1.1技術(shù)進(jìn)行開發(fā),我們已經(jīng)建立了基于ASP.NET2.0 Context Menu項(xiàng)目,該項(xiàng)目拷貝了他的代碼,并進(jìn)行了簡(jiǎn)單的更改。其中,一個(gè)改變是在Context Menu項(xiàng)目里添加了OnClientClick屬性,這樣在處理客戶端向服務(wù)器請(qǐng)求的回發(fā)前,開發(fā)人員可以將客戶端處理事件掛接到上下文菜單里。
Context Menu使用的客戶端代碼主要是Javascript代碼,這里的代碼在ASP.NET2.0里已經(jīng)作為資源(Resource)包括進(jìn)去了。
Context Menu現(xiàn)在已經(jīng)是基于ASP.NET2.0的項(xiàng)目了并且已經(jīng)集成到擴(kuò)展的GridView控件的每一行,現(xiàn)在當(dāng)您右擊每一行時(shí),您將可以訪問右擊事件。擴(kuò)展的GridView控件還有一個(gè)新的屬性:RightClickRow,該屬性可以返回當(dāng)前行上下文菜單
相關(guān)的屬性如下:
·GridView控件是具有上下文菜單的,這里的ID設(shè)置的就是在ASPX頁(yè)面上的GridView控件ID
·RightClickedRow:該屬性設(shè)置上下文菜單。
下圖顯示了運(yùn)行結(jié)果。
當(dāng)您在行上單擊鼠標(biāo)右鍵時(shí)彈出Context Menu菜單。這里顯示了三個(gè)選項(xiàng):
·Add a new Row:當(dāng)選擇該選項(xiàng)后,將會(huì)在記錄里出現(xiàn)新建行。
·Delete Row:允許你刪除當(dāng)前右擊的行
·Edit Row:運(yùn)行您設(shè)置當(dāng)前行的模式 為編輯模式
【編輯推薦】