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