遞迴方式的 FindControl

本文介绍了一种改进的FindControl方法,通过递归实现对ASP.NET中复杂控件如GridView、FormView内嵌控件的查找,解决了传统FindControl仅能查找一级子控件的问题。
一般 FindControl 函式只能找到第一層子控制項,像 GridView、FormView 之類的複合式控制項,要尋找包含的控制項就非常麻煩,要明確找到父代控制項(容器),才能使用 FindControl 去找到子控制項。而且一旦所有往上的父代控制項有任一層變更,就需要再去修改程式碼。

為解決上述的問題,可以使用遞迴的方式來進行 FindControl 的動作,來簡化尋找控制項的麻煩。請參閱以下的 FindControlEx 函式。

 1     ''' <summary>
 2     ''' 遞迴尋找指定 ID 的控制項。
 3     ''' </summary>
 4     ''' <param name="Parent">父代控制項。</param>
 5     ''' <param name="ID">欲尋找的控制項識別 ID。</param>
 6     ''' <returns>回傳 ID 符合的控制項,若未找到則傳回 Nothing。</returns>
 7     Public Function FindControlEx(ByVal Parent As System.Web.UI.Control, ByVal ID As StringAs System.Web.UI.Control
 8         Dim oCtrl As System.Web.UI.Control = Nothing
 9         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 
24         Return oCtrl
25     End Function


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值