本篇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至GridView之后,希望能編輯數據。但不想按照傳統方式一樣,一行一行點擊編輯銨鈕之后,才能進入編輯狀態,而一開始就是能編輯。怎樣實現編輯,四個字段,前后字段“性別”與“在職否”,只有兩個值。“男”與“女”; “在職”與“離職” 可以使用RadioButtonList控件。而中間兩個字段中“所屬部門”與“職位”,多值呈現,可以使用DropDownList控件:
既然有控件,我們需要拿數據源來給這些控件數據綁定。由於這些控件均是在GridView控件內的,綁定在OnRowDataBound事件中進行。
上面代碼示例中,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 將學到更好的方法重構。
寫好這個公用的方法之后,我們去改寫那些冗余的代碼:
一步一個步驟,把程序寫好......