歐陽(yáng)艷階,張 明
(十堰職業(yè)技術(shù)學(xué)院 信息與智能工程系,湖北 十堰 442000)
ASP.Net是微軟公司.Net戰(zhàn)略的重要組成部分,是一種建立在通用程序語(yǔ)言上的程序構(gòu)架,能被Web服務(wù)器用來(lái)建立強(qiáng)大的服務(wù)器端Web應(yīng)用程序。ASP.Net大量使用Com技術(shù),將 Web瀏覽器和Web服務(wù)器之間的數(shù)據(jù)交換完全包裝起來(lái)。作為微軟公司戰(zhàn)略產(chǎn)品,ASP.Net還提供一個(gè)統(tǒng)一的Web開(kāi)發(fā)模型,其中包括WEB開(kāi)發(fā)人員開(kāi)發(fā)大型Web應(yīng)用程序所需要的各種技術(shù)和服務(wù)。ASP.Net還提供一種新的編程結(jié)構(gòu),可通過(guò)編譯生成穩(wěn)定性和伸縮性更好的WEB應(yīng)用程序,并在安全性上有完整的保護(hù)機(jī)制。
ASP.Net中的網(wǎng)格控件GridView以類(lèi)似Excel電子表格的形式提供給用戶(hù)一個(gè)個(gè)性化的表格視圖,表格視圖中每一行代表來(lái)自數(shù)據(jù)源記錄集的一條記錄。這樣可以批量顯示數(shù)據(jù),也為更新數(shù)據(jù)創(chuàng)造了條件。同時(shí)GridView控件提供了豐富的、友好的智能標(biāo)記界面,常用的更新、排序、分頁(yè)、刪除等操作幾乎可以零代碼實(shí)現(xiàn)。GridView控件還具有分頁(yè)等頁(yè)面管理屬性,可以自定義頁(yè)面導(dǎo)航和計(jì)數(shù),使分頁(yè)管理和控制更加方便、合理。GridView控件的面向?qū)ο蟮氖录芾砉δ茉O(shè)計(jì)成會(huì)觸發(fā)兩個(gè)事件,一個(gè)在操作前發(fā)生,一個(gè)在操作后發(fā)生。操作前觸發(fā)的事件多為“ing”事件,操作后觸發(fā)的事件多為 “ed”事件,比如Sorting事件和Sorted事件,分別標(biāo)示排序前發(fā)生和排序后發(fā)生的事件;RowDeleting和RowDeleted事件分別標(biāo)示正在刪除和刪除后發(fā)生的事件。由于GridView控件出色的數(shù)據(jù)管理功能,因此深受開(kāi)發(fā)人員的喜愛(ài),在WEB開(kāi)發(fā)過(guò)程中被大量使用[1]。
在實(shí)際 WEB項(xiàng)目開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)碰到插入、修改、刪除等批量數(shù)據(jù)處理的情況。但Grid-View一般一次只能編輯一行。為了優(yōu)化GridView控件的數(shù)據(jù)更新功能,減少往返提交數(shù)據(jù)的代價(jià),可以一次性批量編輯GridView中的所有行,以減少網(wǎng)絡(luò)傳輸次數(shù),達(dá)到提高系統(tǒng)性能的目的。
GridView控件采用表格形式顯示從數(shù)據(jù)庫(kù)中獲取的數(shù)據(jù)集合。但GridView控件本身只能對(duì)其所綁定的數(shù)據(jù)進(jìn)行單行的更新,當(dāng)需要對(duì)GridView控件所綁定的數(shù)據(jù)進(jìn)行大批量更新時(shí),GridView控件自身的單行更新效率就顯得比較低下了。而目前已有的GridView控件批量更新方法雖然能實(shí)現(xiàn)批量更新,但存在許多缺陷。本文探討了GridView控件的單行更新、通用批量更新方法,并對(duì)Grid-View控件通用批量更新的方法進(jìn)行了改進(jìn),并設(shè)計(jì)了算法。
雖然GridView控件一般只能單行更新數(shù)據(jù),但通過(guò)變通,使用其他控件及模板技術(shù)仍然能實(shí)現(xiàn)批量更新數(shù)據(jù)功能,只是存在部分功能上的缺陷而已。通用批量更新方法如下:首先用TextBox控件替換模板列中的Label控件,并將TextBox控件的Text屬性設(shè)置為綁定數(shù)據(jù)表中欲更新的表字段,如:Bind("Teacher_Name")。然后通過(guò)循環(huán)遍歷GridView控件所加載的所有行,獲取每一行Text-Box控件的Text屬性所設(shè)置的數(shù)據(jù)內(nèi)容。通過(guò)Update語(yǔ)句更新數(shù)據(jù),最后重新使用Bind()方法綁定數(shù)據(jù),達(dá)到批量更新GridView控件數(shù)據(jù)的目的。
GridView控件的通用批量更新方法雖然能一次性批量更新所有數(shù)據(jù)記錄集中的數(shù)據(jù),但該方法卻存在以下不足。
(1)使用該方法后無(wú)法重新使用GridView控件本身具備的單行更新編輯功能,每次都必須進(jìn)行所有記錄集數(shù)據(jù)的批量更新。
(2)模板列ItemTemplate中的內(nèi)容僅有Text-Box控件,需要更新記錄集數(shù)據(jù)的綁定后狀態(tài)和初始綁定狀態(tài)均為T(mén)extBox控件的Text屬性,無(wú)法實(shí)現(xiàn)記錄集數(shù)據(jù)的靜態(tài)綁定,同時(shí)也不利于觀察、區(qū)分?jǐn)?shù)據(jù)集數(shù)據(jù)批量更新前后的不同變化。
為了解決GridView控件一次性批量更新數(shù)據(jù)時(shí)存在的上述問(wèn)題,本文對(duì)GridView控件的通用批量更新方法進(jìn)行了部分改進(jìn),具體方法如下:
(1)在ItemTemplate模板列中添加文本框控件TextBox,將TextBox控件的Text屬性與 Grid-View控件原來(lái)使用的Lable控件綁定到相同的數(shù)據(jù)字段,并將其默認(rèn)狀態(tài)隱藏。同時(shí)保持EditItem-Template模板列的默認(rèn)綁定不變。
(2)增加一個(gè)“批量保存”按鈕btn_AllSave。在觸發(fā)btn_AllSaved的Click事件時(shí),首先判斷Grid-View控件的記錄集數(shù)據(jù)是否處于單行編輯狀態(tài)。如果是單行編輯,則先進(jìn)行單行的更新,否則將ItemTemplate模板列中的TextBox控件的Visible屬性設(shè)置為T(mén)rue,Label控件的Visible屬性設(shè)置為False,并將GridView控件本身的“編輯”列隱藏。
本文以一個(gè)高校的人事管理系統(tǒng)為載體,闡述了對(duì)GridView控件通用批量更新方法的改進(jìn)措施及算法設(shè)計(jì)思想。
(1)設(shè)置并建立數(shù)據(jù)庫(kù)連接及相關(guān)表的查詢(xún)語(yǔ)句設(shè)計(jì);
(2)在GridView控件的ItemTemplate模板列中添加TextBox控件,并將TextBox控件綁定到相應(yīng)表字段。使GridView控件能正確顯示數(shù)據(jù)庫(kù)中的記錄集;
(3)設(shè)置5個(gè)類(lèi)的全局公用標(biāo)志變量,分別對(duì)應(yīng)高校的人事管理系統(tǒng)中的教師姓名、性別、學(xué)歷、電話、家庭住址五個(gè)TextBox控件個(gè)字段,用于監(jiān)視這五個(gè)字段是否發(fā)生了變化。每次循環(huán)開(kāi)始前,五個(gè)標(biāo)志均置空。每個(gè)標(biāo)志變量均在TextBox控件的TextChanged事件中進(jìn)行重新設(shè)置。以確保循環(huán)時(shí)能監(jiān)測(cè)到該行是否發(fā)生了變化;
(4)以 GridView1.Rows.Count進(jìn)行計(jì)數(shù)循環(huán),若該行五個(gè)標(biāo)志中任何一個(gè)發(fā)生變化,即表明該行需要更新。若五個(gè)標(biāo)志均為置空狀態(tài),即表明該行不需參與更新;
(5)使用更新語(yǔ)句進(jìn)行數(shù)據(jù)更新。
其中<%#Bind("Teachername")%>的功能是使用Bind()方法將TextBox控件的Text屬性綁定為數(shù)據(jù)庫(kù)中表的“Teachername”字段
在在web.config WEB配置文件中添加數(shù)據(jù)庫(kù)連接字符串。
GridView控件的批量數(shù)據(jù)更新功能是一種高效的編程策略,是B/S結(jié)構(gòu)軟件開(kāi)發(fā)中非常實(shí)用的功能。將GridView控件的批量數(shù)據(jù)更新功能巧妙地運(yùn)用到B/S結(jié)構(gòu)軟件中,可以提高 WEB項(xiàng)目開(kāi)發(fā)與運(yùn)行效率,是B/S結(jié)構(gòu)軟件開(kāi)發(fā)中非常有價(jià)值的算法。
基于實(shí)際開(kāi)發(fā)的軟件工程項(xiàng)目,本文闡述了Visual Studio.Net平臺(tái)下GridView控件的批量數(shù)據(jù)更新的改進(jìn)算法,提出了改進(jìn)措施,設(shè)計(jì)了算法,并給出了部分代碼。本文在Visual Studio 2008,SQL Server 2005環(huán)境下調(diào)試通過(guò)。
[1]楊學(xué)全.Visual C#.NET Web應(yīng)用程序設(shè)計(jì)[M].北京:電子工業(yè)出版社,2012:7-9.
[2]劉 偉.Visual C#程序設(shè)計(jì)與項(xiàng)目實(shí)踐[M].北京:清華大學(xué)出版社,2011:108-112.
[3]鄭阿奇.Visual C#網(wǎng)絡(luò)編程[M].北京:電子工業(yè)出版社,2011:178-181.