2009年12月9日 星期三

遞迴的FindControl

被MasterPage搞到很怒,動手寫了這個東西

目前專案用MasterPage取代以前的frameset來分割網頁,已經做了好幾張網頁後才發現這個問題--
如果要在MasterPage裡找到某個Control,要一路找好幾層的Container才找的到。
實在是FindControl Find到很怒,乾脆寫支程式遞迴下去跑。
/// 
/// 遞迴找出P_StartingControl裡第一個以P_ControlName命名的Control,找不到則回傳null
/// 
public static Control FindWebControl(Control P_StartingControl, string P_ControlName)
{
    Control rtnCtl = null;
    if (P_StartingControl.Controls.Count > 0)
    {
        foreach (Control ctl in P_StartingControl.Controls)
        {
            if (ctl.ID != null && ctl.ID.Equals(P_ControlName))
            {
                rtnCtl = ctl;
                break;
            }
            else
            {
                rtnCtl = FindWebControl(ctl, P_ControlName);
                if (rtnCtl != null)
                    break;
            }
        }
    }
    return rtnCtl;
}

這支程式的缺點是,回傳的Control要自己轉型...(遮臉