ASP.NET 递归 FindControl
一般 FindControl 函数只能找到第一层子控件,像 GridView、FormView 之类的复合式控件,要寻找包含的子控件就非常麻烦,要找到父控件(容器),才能使用 FindControl 去找到子控件。而且一旦所有往上的父控件有任一层的变更时,就需要再去修改程序代码,这样就非常麻烦。
为了解決此的问题,可以使用递归的方式來进行 FindControl 的操作。见下面的 FindControlEx 方法。
为了解決此的问题,可以使用递归的方式來进行 FindControl 的操作。见下面的 FindControlEx 方法。
代码
/// <summary>
/// 递归查找找指定ID的控件
/// </summary>
/// <param name="Parent">父控件(控件容器)</param>
/// <param name="id">要查找的控件ID</param>
/// <returns>回传符合ID的控件,若未找到则返回Null</returns>
public static System.Web.UI.Control FindControlEx(System.Web.UI.Control parentControl, string id)
{
System.Web.UI.Control control = null;
//先使用 FindControl 去查找指定的子控件
control = parentControl.FindControl(id);
//如果未找到则往下层递归方式去查找
if (control == null)
{
foreach (System.Web.UI.Control oChildCtrl in parentControl.Controls)
{
//以递归方式回调原函数
control = FindControlEx(oChildCtrl, id);
//如果找到指定控件则退出循环
if (control != null) break;
}
}
return control;
}
/// 递归查找找指定ID的控件
/// </summary>
/// <param name="Parent">父控件(控件容器)</param>
/// <param name="id">要查找的控件ID</param>
/// <returns>回传符合ID的控件,若未找到则返回Null</returns>
public static System.Web.UI.Control FindControlEx(System.Web.UI.Control parentControl, string id)
{
System.Web.UI.Control control = null;
//先使用 FindControl 去查找指定的子控件
control = parentControl.FindControl(id);
//如果未找到则往下层递归方式去查找
if (control == null)
{
foreach (System.Web.UI.Control oChildCtrl in parentControl.Controls)
{
//以递归方式回调原函数
control = FindControlEx(oChildCtrl, id);
//如果找到指定控件则退出循环
if (control != null) break;
}
}
return control;
}