想了解此篇,Insus.NET建議網友們先看這篇《http://www.cnblogs.com/insus/archive/2013/04/23/3035447.html》,因為此篇是那篇的基礎上進行升級的。
說實的,上一篇只是完成了基本的功能,怎樣把字符串進行分割,並綁定至GridView的自定義模版上,最后的是處理用戶選擇的選項處理與存儲在數據庫中,還是在網頁再次加載時,把上次選擇的選項顯示於checkBoxList控件內。
這算不上是動態創建CheckBox。
因此,在此次Insus.NET再使用另外完全不一樣的方法,來實現這個相同的功能,也算得上重構了。
將要顯示CheckBox的列,將使用用戶控件(ASCX)來替代。沒有看錯吧? 是的,沒有看錯,Insus.NET將創建一個用戶控件來替代那一列。
使用用戶控件,需要考慮一些問題,GridView怎與用戶控件互動,因為需要顯示數據,還是存儲用戶選擇的數據。其實以前Insus.NET實現的,全是網頁與用戶控件互動,還是頭一次嘗試GridView與用戶控件互動。
如果你想看看是怎樣實現,可以繼續往下看,因為還是較特別的方法。
Ok,我們創建一個用戶控件在站點上MyInfo.ascx,Html頁很簡單,只是拉放了一個CheckBoxLrist控件。
在MyInfo.ascx.cs中,首先宣告兩個私有變量,下圖中的第11和12行代碼,一個是CheckBoxList的數據源,另一個是用戶選擇的數據。
上圖中,第22行代碼,就是如果_DataSource轉換為字符串之后的長度小於等於0的話,將為處理以后的代碼,即返回跳過。
第24行代碼,是CheckBoxList綁定的方法,還是就是第28行代碼是把用戶選擇的數據綁定至CheckBoxList控件內上。
接下來,我們先看CheckBoxlistParse()方法:
第34行代碼,是計算Split之后,共有多少組數據,把這個值賦給CheckBoxList的RepeatColumns屬性。
另一個方法CheckBoxlistBind(),這個方法是把用戶選擇的選項重新綁定至CheckBoxList控件上。CheckBoxList的Item是否是選擇的,可以Selected()方法反映出來。
Ok, Insus.NET會把復雜的方法拆分更細小的方法,可從前一篇看到原版復雜的方法,整段處理的流程均寫在一個方法內,日后很難維護的。
用戶控件寫好了,把它拉入 GridView控件中:
現在用戶控件算是整合入GridView控件了,通訊是個問題。接口來解決,是Insus.NET慣用的方法。下面接口:
接口有二個方法和一個函數,前二者將為GridView傳值給用戶控件,而函數將是用戶控件給網頁的OnClick事件服務。這個接口是為用戶控件實作之用。
上面用戶控件實現接口,應該是寫得簡單明了。我們再打開.aspx.cs代碼,看看和事件怎樣改寫:
第36行是找到用戶控件,並轉為接口,因為前面我們已經把用戶控件實作了接口,此時當然后可以轉換對象為接口。然后把兩個值分別賦值接口定義好的兩個方法。
第48行代碼也是一樣的理解,而51行代碼,就是獲取用戶控件傳過來的值。
Ok,寫完了,望你能有所收獲。