2012-11-26

[ASP.NET] 將常用的DropDownList內容打包成物件(Class)

在開發同一個專案時,部份DropDownList的內容有時是一樣的,例如部門、年月,又懶得每個程式都寫一次SQL去Bind資料,才想到將常用的全部打包成一個Class,當成DropDownList的擴充功能,之後直接呼叫就自動Bind好資料,不是很方便嗎~

那簡單介紹一下這個Selection Class,其實也能再改成適合RadioButtonList或CheckBoxList來用,但目前只做給DropDownList而已,有時間再來擴充。

使用方法:
  • 引用Selection。
  • DropDownList直接呼叫擴充方法BindDropDownList(BindingType),用參數BindingType來指定要綁定的內容。
using Selection;
...
// EX:綁定月份(1~12)
DropDownList1.BindDropDownList(BindingType.MonthDropList);

簡單說明一下Selection Class的內容,內容包含:
  • Selection Class:裡面只有一個BindDropDownList method,用來當作入口。
  • BindingType enum:BindDropDownList method的參數,用來指定要Bind的內容。
  • BindingMethod Class:用來實作BindingType enum。
  • DB Class:DB Utility。
其中DB Class可以自行更換成自己常用的,再去修改BindingMethod Class的BindDataByDb method即可。


目前的BindingMethod Class裡面示範了兩種Binding資料的寫法。
一種是內容寫死在程式裡的,EX:SexDropList method:
public void SexDropList(DropDownList oDropList)
{
 AddNewSelection("男", "0").AddNewSelection("女", "1").BindData(oDropList);
}
另一種是自行下SQL去抓出要Binding的資料,這種方法可以指定Binding的Text和Value,EX:DeptDropList method:
public void DeptDropList(DropDownList oDropList)
{
 sSQL = string.Format("SELECT {0} DeptID {1} ,DeptName {2} From tblDept Order By DeptID", 
    IsDistinct ? "Distinct" : "",
    AliasField != "" ? "AS " + AliasField : "",
    AliasValue != "" ? "AS " + AliasValue : "");

 oDropList.AppendDataBoundItems = true;
 AddNewSelection("全部", "").BindData(oDropList);

 BindDataByDb(oDropList);
}

如果要自行擴充Binding的內容,要把method加在BindingMethod Class裡,再把method Name加到BindingType enum,記得兩邊的名稱要一模一樣,因為是用反射原理去抓method的~

附上Selection Class

沒有留言:

張貼留言