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