今天做项目卡到了 在Repeater1_ItemDataBound 里用findcontrol找不到控件
经过几番的查询 呵呵终于找到了 解决的办法(加上了判断就OK了)
if (e.Item.ItemType ==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
Label lb1 = (Label)e.Item.FindControl("Label1");
Repeater rp2 =(System.Web.UI.WebControls.Repeater)e.Item.FindControl("rp2");
IList<Cgjun.Models.Right> lstRp2 =RightManage.GetFontRightListByParentRightID(12003);
if (lstRp2 != null)
{
rp2.DataSource = lstRp2;
rp2.DataBind();
}
}
这样就限定了查找的范围
转一下别人的对page.findcontrol()的描述
FindControl方法是在当前naming container查找指定ControlID对应的控件,该namingcontainer是一个实现了INamingContainer接口的对象。
可以在该页的页指令中添加 Trace=Ture指令来跟踪页面输出查看控件树。一个页面的控件树中,Page对象必然是顶级的namingcontainer,但绝非必然是唯一的namingcontainer。譬如当有GridView存在的话,GridView其实也是一个namingcontainer,要找GridView中的一个ControlID,就不能用Page.FindControl,而得用[GridView对象].FindControl方法。
很多时候,因为是动态控件,明知道是在同一个naming container中,但不知道该namingcontainer是什么对象,一个控件要找到另一个控件,可以用this.Parent.FindControl方法。
具体可参看Page.FindControl方法找不到指定控件的原因