asp:Repeater的嵌套,主要是想实现导航的下拉菜单功能,类似以下效果
前台代码
<li> <a href="#"><%#DataBinder.Eval(Container.DataItem,"title")%><b></b></a> <ul class="subnav"> <li> <a href="#"><%#DataBinder.Eval(Container.DataItem,"title")%></a> </li> </ul></li>
后台代码
public void rptNav_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Repeater rpColumnNews = (Repeater)e.Item.FindControl("rptNav",2); //找到分类Repeater关联的数据项 DataRowView rowv = (DataRowView)e.Item.DataItem; //提取分类ID int pId = Convert.ToInt32(rowv["id"].ToString(),2); BLL.category bll = new BLL.category(,2); DataTable dt = bll.GetList(pId, 1,2); Repeater rptNavSub = (Repeater)e.Item.FindControl("rptNavSub",2); rptNavSub.DataSource = dt; rptNavSub.DataBind(,2); dt.Dispose(,2); } }
如果在后台代码中直接使用rptNavSub.DataSource的话,编译的时候会出现错误提示:rptNavSub上下文不存在
如果要让rptNavSub绑定数据,必须Repeater rptNavSub = (Repeater)e.Item.FindControl("rptNavSub",2);
嵌套之后页面就不止1个rptNavSub,所以其实嵌套的Repeater的ID实际上是后生成的,并不是我们指定的Repeater。