DropDownList 在執行 DataBind 動作時,若 Items 集合中不存在繫結的欄位值時會發生 Exception。不過 DropDownList 這種設計方式常會造成困擾,很多時候繫結的欄位值無法預期,而且 DropDownList 控制項在這種狀況釋出的錯誤在頁面程式碼中無法處理。
為了解決這種情形,比較快的方式就是直接改掉 DropDownList,在控制項中處理這種無法繫結的情形才是最終的解決方案。那我們該從何處下手呢?想想通常 DropDownList 控制項做資料繫結的是什麼屬性呢?沒錯,就是 SelectedValue 屬性,那我們就從覆寫 SelectedValue 屬性下手,改寫 SelectedValue 屬性的 Set 動作;當寫入 SelectedValue 屬性時的新值不存在 Items 集合中時,就直接設定其 SelectedIndex = -1。這樣就可以很簡單決解掉 DropDownList 繫結錯誤的問題了。
為了解決這種情形,比較快的方式就是直接改掉 DropDownList,在控制項中處理這種無法繫結的情形才是最終的解決方案。那我們該從何處下手呢?想想通常 DropDownList 控制項做資料繫結的是什麼屬性呢?沒錯,就是 SelectedValue 屬性,那我們就從覆寫 SelectedValue 屬性下手,改寫 SelectedValue 屬性的 Set 動作;當寫入 SelectedValue 屬性時的新值不存在 Items 集合中時,就直接設定其 SelectedIndex = -1。這樣就可以很簡單決解掉 DropDownList 繫結錯誤的問題了。
1 Public Class TBDropDownList
2 Inherits DropDownList
3
4 ''' <summary>
5 ''' 覆寫 SelectedValue 屬性。
6 ''' </summary>
7 Public Overrides Property SelectedValue() As String
8 Get
9 Return MyBase.SelectedValue
10 End Get
11 Set(ByVal value As String)
12 Dim oItem As ListItem = Me.Items.FindByValue(value)
13 If (oItem Is Nothing) Then
14 Me.SelectedIndex = -1 '當 Items 不存在時
15 Else
16 MyBase.SelectedValue = value
17 End If
18 End Set
19 End Property
20
21 End Class
2 Inherits DropDownList
3
4 ''' <summary>
5 ''' 覆寫 SelectedValue 屬性。
6 ''' </summary>
7 Public Overrides Property SelectedValue() As String
8 Get
9 Return MyBase.SelectedValue
10 End Get
11 Set(ByVal value As String)
12 Dim oItem As ListItem = Me.Items.FindByValue(value)
13 If (oItem Is Nothing) Then
14 Me.SelectedIndex = -1 '當 Items 不存在時
15 Else
16 MyBase.SelectedValue = value
17 End If
18 End Set
19 End Property
20
21 End Class