ASP.NET開發,且編且改,分清職責


本篇Insus.NET使用一個實例,分享在ASP.NET開發時,一個功能一個方法(函數),且編且改,一步一個腳印把實例完成。在方法多變多形式的情況之下,怎樣把寫出來程序簡單明了。

 
下面是一個Excel文檔:
http://download.cnblogs.com/insus/ASPDOTNET/Book1.rar

 

現在是要讀取它,並顯示於GridView控件上,方法參考《Excel上傳並讀取數據http://www.cnblogs.com/insus/p/3814857.html 由於一些字段在本篇中,無用,因此刪除之。

"SELECT [性別],[所屬部門],[職務],[在職否] FROM [Sheet1$]"

 
我們在xxx.aspx 的html markup中。拉一個GridView控件,並使用自定義模版:

 

讀取Excel演示:

 

 現在要求來了,用戶需要讀取與加載Excel至GridView之后,希望能編輯數據。但不想按照傳統方式一樣,一行一行點擊編輯銨鈕之后,才能進入編輯狀態,而一開始就是能編輯。怎樣實現編輯,四個字段,前后字段“性別”與“在職否”,只有兩個值。“男”與“女”; “在職”與“離職” 可以使用RadioButtonList控件。而中間兩個字段中“所屬部門”與“職位”,多值呈現,可以使用DropDownList控件:

 

 既然有控件,我們需要拿數據源來給這些控件數據綁定。由於這些控件均是在GridView控件內的,綁定在OnRowDataBound事件中進行。

 

四個嵌套在GridView控件內的控件數據綁定:

 


上面代碼示例中,Insus.NET只做兩個控件的示意,一個DropDownList和一個RadioButtonList。它們的數據源有來自數據庫,有來自函數。你需要指定顯示的數據(DataTextFeid),哪一個用作后端獲取的數據(DataValueField)。這需要根據你開發時的需求了。


寫到這里,你發現四個控件在綁定數據源時,有代碼冗余:

 ccc.DataSource = xxx;
 ccc.DataTextField = yyy;
 ccc.DataValueField = zzz;
 ccc.DataBind();


我們可以重構為一個方法,在重構之前,我們會遇上二個問題要考慮的,一個是控件不同。RadioButtonList和DropDownList;二是被綁定的數據源不同,一些為泛型,DataTable等。處理好這些,需要想出一個萬全之策。如:

 

看到兩個紅箭頭否,由於RadioButtonList和DropDownList控件,均是繼承了ListControl控件。數據源不管是什么,均宣告為object即可。然后上面的四個控件的綁定,就可以使用這個方法了:


如果把注釋掉的代碼拿掉,是不是簡潔多了?看看運行時瀏覽的效果:

 


現在看到一個問題,中間兩個DropDownList下拉列表,沒有“--選擇--”選項。怎樣加入第一個項呢?哦,這個簡單:


添加上面兩行高亮代碼,得到地效果如下:

 

到現在為止,我們只是對控件進行數據源綁定。回頭來看看下載的Excel數據:

 正確來說,應該是把數據原始狀態一起綁定,OK,解決此問題,再寫程序:

把每筆記錄與控件綁定的數據時行匹配,匹配的,改變狀態。
瀏覽看看結果:


嗯,越來越接近理想的要求了。開發就是這樣,一個功能,一個方法或是一個函數,分清職責。
呵呵明眼人,又會看到上面的代碼有冗余了:

 foreach (ListItem li in ccc.Items)
                    li.Selected = li.Text == drv["xxx"].ToString() ? true : false;


Insus.NET在開發過程中,一旦發現有代碼冗余,必需重構之,不然看上去就不舒服。創建一個方法吧:

有關這個方法,你還可以參考另外一篇《沒有什么,開發ASP.NET時隨便寫寫,想到什么寫什么http://www.cnblogs.com/insus/p/3810032.html 將學到更好的方法重構。

寫好這個公用的方法之后,我們去改寫那些冗余的代碼:

 

 一步一個步驟,把程序寫好......


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM