洪偉珍
摘要:GridView作為ASP.NET中常用的數(shù)據(jù)綁定控件,具有顯示、編輯和刪除多種不同數(shù)據(jù)源中的數(shù)據(jù),但針對Web頁面的交互操作,如使用鍵盤方向鍵切換單元格等,GridView控件并不支持,本文提出了使用JQuery實(shí)現(xiàn)GridView交互操作的思路,并給出實(shí)現(xiàn)方式。
Abstract: As a commonly used data binding control in ASP.NET, GridView can display, edit and delete data in many different data sources. But for the interactive operation of the Web page, GridView widget can not switch cells by the keyboard keys. This paper puts forward the idea of using JQuery to realize the interactive operation of GridView, and gives the way to realize it.
關(guān)鍵詞:GridView控件;jQuery;交互
Key words: GridView widget;jQuery;alternation
中圖分類號:TP311.1 文獻(xiàn)標(biāo)識碼:A 文章編號:1006-4311(2016)35-0168-02
0 引言
在Web應(yīng)用程序中,表格的使用可以說是無處不在,因此GridView作為ASP.NET中以網(wǎng)格方式呈現(xiàn)數(shù)據(jù)的數(shù)據(jù)綁定控件被廣泛應(yīng)用;jQuery 是一個(gè)“寫的更少,但做的更多”的輕量級 JavaScript 庫,在頁面的交互操作腳本中具有支持多瀏覽器及語言簡潔的特點(diǎn)。通過jQuery來實(shí)現(xiàn)GridView的交互操作,能提高Web應(yīng)用程序的兼容性,同時(shí)降低開發(fā)的難度。
1 分析
GridView控件通過Web服務(wù)器解析后,以HTML代碼的方式傳輸給客戶端。因此在服務(wù)器端編寫的jQuery腳本,實(shí)現(xiàn)GridView控件交互操作,關(guān)鍵點(diǎn)是使用jQuery 選擇器準(zhǔn)確地選取您希望應(yīng)用效果的元素。
圖1是一個(gè)包含在母版頁中的GridView控件,控件每行具有兩個(gè)TextBox控件,用于錄入成績,為了方便成績的輸入,使用JQuery實(shí)現(xiàn)類似Excel單元格選取與輸入的功能,即通過鍵盤的方向鍵實(shí)現(xiàn)文本框的選取,回車則跳轉(zhuǎn)到下一行的文本框中。
圖1的部分aspx頁面代碼如下。
……
……
……
如上代碼,GridView的id為“grv”,其中包含的兩個(gè)TextBox控件的id分別為“tx_qzcj”和“tx_qmcj”,在服務(wù)器端運(yùn)行后傳輸給客戶端的部分HTML代碼如下。
……
班級 | 學(xué)號 | 姓名 | 期中成績 | 期末成績 |
---|---|---|---|---|
154微機(jī)應(yīng)用2 | XX218 | X敬 | ||
GridView控件被轉(zhuǎn)換為table標(biāo)簽,TextBox控件被轉(zhuǎn)換為type為text的input標(biāo)簽,由于GridView是包含在母版頁中的,因此它的id號被轉(zhuǎn)換為“ctl00_ContentPlaceHolder1_grv”,而TextBox的標(biāo)簽被分別轉(zhuǎn)換為“ctl00_ContentPlaceHolder1_grv_ctl02_tx_qzcj”和“ctl00_ContentPlaceHolder1_grv_ctl02_tx_qmcj”。
在本文實(shí)例中將使用jQuery的“#id”選擇器,選擇GridView對應(yīng)的table標(biāo)簽,但因控件是包含在母版中,id號已不再是“grv”,這里需要用到GridView控件的ClientID屬性獲取由 ASP.NET 生成的服務(wù)器控件標(biāo)識符;使用“[attribute*=value]”選擇器,選擇TextBox對應(yīng)的input標(biāo)簽。
2 實(shí)現(xiàn)
如圖2,jQuery使用index()方法獲取的是當(dāng)前的行號,第一行為表頭,它的行索引值為0,但對于包含有TextBox控件的GridView,是從第二行開始的,因此行索引值是從1開始計(jì)算的。因此下一行的input標(biāo)簽索引值為$(this).parent().parent().index(),上一行的索引值為$(this).parent().parent().index())-2。
在aspx頁面中添加如下JQuery代碼,實(shí)現(xiàn)Web頁面的交互操作。
$("#<%=grv.ClientID%>").find("input[id*=tx_qzcj]").keydown(function () {
//遍歷GridView控件生成的table標(biāo)簽中期中成績列文本框,當(dāng)觸發(fā)鍵盤按鍵事件時(shí)執(zhí)行函數(shù)
try {if (event.keyCode == 40 || event.keyCode == 13) {
$("input[id*=tx_qzcj]")[$(this).parent().parent().index()].select();
$("input[id*=tx_qzcj]")[$(this).parent().parent().index()].focus();}
//如果按下向下方向鍵或回車鍵,下一行的文本框變?yōu)檫x中狀態(tài)并獲取焦點(diǎn)
if (event.keyCode == 38) {
$("input[id*=tx_qzcj]")[($(this).parent().parent().index()) - 2].select();
$("input[id*=tx_qzcj]")[($(this).parent().parent().index()) - 2].focus();}
//如果按下向上方向鍵,上一行的文本框變?yōu)檫x中狀態(tài)并獲取焦點(diǎn)
if (event.keyCode == 39) {
$("input[id*=tx_jscj]")[($(this).parent().parent().index()) -1].select();
$("input[id*=tx_jscj]")[($(this).parent().parent().index()) -1].focus();}
//如果按下向右方向鍵,同一行的期末成績列文本框變?yōu)檫x中狀態(tài)并獲取焦點(diǎn)
}catch (e) {return false; } });
//如果當(dāng)前為第一行或最后一行,不能再向上或再向下,返回false
$("#<%=grv.ClientID%>").find("input[id*=tx_jscj]").keydown(function () {
//期末成績列的處理方式與期中成績列的相同
try {
if (event.keyCode == 40 || event.keyCode == 13) {
……
if (event.keyCode == 37) {
$("input[id*=tx_cj]")[($(this).parent().parent().index())-1].select();
$("input[id*=tx_cj]")[($(this).parent().parent().index())-1].focus();}
//如果按下向左方向鍵,同一行的期中成績列文本框變?yōu)檫x中狀態(tài)并獲取焦點(diǎn)
}catch (e) {return false;}});});
3 結(jié)語
通過jQuery實(shí)現(xiàn)GridView的交互操作,能夠在確保兼容的基礎(chǔ)上,使用簡潔的代碼實(shí)現(xiàn)相關(guān)功能。文中給出的程序代碼已在Vistual Studio2013開發(fā)環(huán)境使用C#語言驗(yàn)證通過,并在多種瀏覽器中實(shí)現(xiàn)上述功能。
參考文獻(xiàn):
[1]賀帆.基于模板列在GridView控件中完成數(shù)據(jù)添加[J].科學(xué)咨詢(科技·管理),2015(01):44-45.
[2]馬元元.GridView中顯示/隱藏列及多重表頭的實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2015(09):10-11,34.
[3]顧正剛,畢海峰.對GridView控件高級應(yīng)用的研究與實(shí)現(xiàn)[J].寧波職業(yè)技術(shù)學(xué)院學(xué)報(bào),2008(02).