控制項 編程過程中總會有些重複的東西,如果到處拷貝,既不容易維護,結構也很不清晰,這時候就可以把他們提取出來,根據其共性,架構屬於自己的庫,因為一直從事asp.net方面的開發,就結合實際情況,用vb.net舉個例子。 asp.net方面的開發,就結合實際情況,用vb.net舉個例子。
在做進銷存等軟體的時候,經常會用到倉庫、部門、類別等基礎資料,而且這些東西會反覆用到,最常使用的是使用DropDownList控制項,如果還沒有選定,就列出所有的資訊,如果開啟已有記錄,就顯示已選定的資訊,功能很簡單,就舉個倉庫的例子。
常用的代碼如下,因為是個例子,異常處理就省略了:
(new store).GetData 返還的是個DataTable,裡面有主鍵”StoreID”,名稱”StoreName”欄位
Protected WithEvents DropStore As System.Web.UI.WebControls.DropDownList
‘綁定倉庫DropDownList列表
‘如果StoreID=0,則選擇內容為“”,否則選定該倉庫
Private Sub BindStore(Optional ByVal StoreID As Integer = 0)
DropStore.DataSource = (New Store).GetData
dropstore.DataValueField=”StoreID”
dropstore.DataTextField =”StoreName”
DropStore.DataBind()
Dim listitem As ListItem = New ListItem("", "0")
dropclass.Items.Add(listitem)
If StoreID=0 Then
dropstore.SelectedIndex = dropstore.Items.Count – 1
Else
dropstore.Items.FindByValue(StoreID).Selected = True
End if
End Sub 這段代碼放在需要選擇、顯示倉庫的地方,確實能用,但是如果使用倉庫的頁面很多,這段代碼就需要到處拷貝,既不方便,維護也很不方便,想象一下假如以後需要對倉位管理,DropDownList需要按層次顯示庫存的情況,那時就需要找到所有使用這段代碼的部分,進行修改。 重複的代碼統一管理,這是現在編程的基本要求,從可重用性出發,如果把這個部分做成一個控制項,在介面上拖拖拉拉,簡單設幾個屬性就達到了目的,確實是個不錯的想法,想到就要做到,下面我們就把它實現。 建立一個項目,項目名稱是JxcControls,類型為類庫,添加一個檔案,檔案類型是自訂控制項,名稱StoreDropDownList,開啟這個檔案,我們可以發現編譯器已經協助我們做了很多東西了,不過這些東西的協助不大,我們還需要做很多工作,把預設內容改為下面:
Imports System.ComponentModel
Imports System.Web.UI
‘把WebControl改為DropDownList
<ToolboxData("<{0}:StoreDropDownList runat=server></{0}:StoreDropDownList>")> Public Class StoreDropDownList
Inherits System.Web.UI.WebControls.DropDownList
Dim _StoreId As String
‘唯讀屬性
<Bindable(True), Category("Appearance"), DefaultValue("")> ReadOnly Property StoreName