摘要:遞迴方式的 FindControl
一般 FindControl 函式只能找到第一層子控制項,像 GridView、FormView 之類的複合式控制項,要尋找包含的控制項就非常麻煩,要明確找到父代控制項(容器),才能使用 FindControl 去找到子控制項。而且一旦所有往上的父代控制項有任一層變更,就需要再去修改程式碼。
為解決上述的問題,可以使用遞迴的方式來進行 FindControl 的動作,來簡化尋找控制項的麻煩。請參閱以下的 FindControlEx 函式。
01
''' <summary>
02
''' 遞迴尋找指定 ID 的控制項。
03
''' </summary>
04
''' <param name="Parent">父代控制項。</param>
05
''' <param name="ID">欲尋找的控制項識別 ID。</param>
06
''' <returns>回傳 ID 符合的控制項,若未找到則傳回 Nothing。</returns>
07
Public Function FindControlEx(ByVal Parent As System.Web.UI.Control, ByVal ID As String) As System.Web.UI.Control
08
Dim oCtrl As System.Web.UI.Control = Nothing
09
Dim oChildCtrl As System.Web.UI.Control = Nothing
10
11 '先使用 FindControl 去尋找指定的子控制項
12
oCtrl = Parent.FindControl(ID)
13
14 '若尋找不到則往下層遞迴方式去尋找()
15
If oCtrl Is Nothing Then
16
For Each oChildCtrl In Parent.Controls
17
'以遞迴方式呼叫原函式
18
oCtrl = FindControlEx(oChildCtrl, ID)
19
'若有尋找到指定控制項則離開迴圈
20
If oCtrl IsNot Nothing Then Exit For
21
Next
22
End If
23
Return oCtrl
24
End Function

02

03

04

05

06

07

08

09

10

11 '先使用 FindControl 去尋找指定的子控制項
12

13

14 '若尋找不到則往下層遞迴方式去尋找()
15

16

17

18

19

20

21

22

23

24
