ASP.NET 2.0:如何讓DropDownList同時擁有資料來源項目與自訂項目
圖表1
其實在許多時候,我們會希望網頁上的DropDownList控制項同時擁有資料來源項目與自訂項目。這樣說如果您還不是很明白,請看圖表1所示的網頁範例。我們發現,第一個選項「請選擇一個部門」顯然是一個自訂項目,而其它選項則是來自資料表的「部門」欄位。以本範例而言,欲完成這樣的設計,請依序進行下列設定:
1. 首先,請於網頁上選取您的DropDownList控制項,並於「屬性」視窗中將屬性AppendDataBoundItems屬性設定成True。
2. 緊接著,按一下Items屬性之右側的「…」按鈕。
3. 「ListItem集合編輯器」對話方塊開啟後,請按一下「加入」按鈕,並於右側邊窗格進行下列設定:
Ø 將Text屬性設定成“請選擇一個部門”。
Ø 由於我們希望此自訂選項一開始就被選取,因此請將Selected屬性設定成True。
確認您的「ListItem集合編輯器」對話方塊表2所示後,按一下「確定」按鈕。
(請注意:您可以加入多個自訂項目,欲加入多個自訂項目,請反覆步驟3的操作,直到您已經加入所需的多個自訂項目為止)
圖表2
4. 最後,您必須替DropDownList控制項設定來自資料表之「部門」欄位的選項。欲達此目的,請從DropDownList控制項的智能卷標選項中選取「設定資料來源」選項,以便建立一個SqlDataDataSource對象來查詢出「部門」欄位的部門作為選項。此部分我們就不再一一贅述,結果應表3所示。
圖表3
我想,上述作法是ASP.NET 2.0非常不錯的一項功能,因為您不需撰寫複雜的程式碼即可輕易完成相關處理。當然啦,如果您是位高竿的程式設計師,不想通過介面來處理,也可以直接在網頁的Load事件處理常式中撰寫下列程式碼來達到相同的目的:(不過我們建議您能夠少寫程式就少寫些程式吧)
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Me.DepartmentDropDownList.Items.Add("請選擇一個部門")
' 利用 SqlConnectionStringBuilder 對象來構建連接字串。
Dim connectStringBuilder As New SqlConnectionStringBuilder()
connectStringBuilder.DataSource = "(local)\SQLEXPRESS"
connectStringBuilder.InitialCatalog = "北風貿易"
connectStringBuilder.IntegratedSecurity = True
Try
Using cn As New SqlConnection(connectStringBuilder.ConnectionString)
Dim cmdLiming As New SqlCommand( _
"SELECT DISTINCT 部門 FROM 章立民研究室", cn)
cn.Open()
Using dr As SqlDataReader = cmdLiming.ExecuteReader
While dr.Read
DepartmentDropDownList.Items.Add(dr.GetSqlString(0).Value)
End While
End Using
End Using
Catch ex As Exception
Me.lblMessage.Text = ex.Message
End Try
End If
End Sub