牛腩购物网20:用户自定义控件的使用,repeater嵌套循环显示大小类别,隐藏域传值
repeater控件的嵌套使用:
我们改写为。
<asp:Repeater ID="repBig" runat="server" onitemdatabound="repBig_ItemDataBound"> <ItemTemplate> <div class="ca"> <div class="ca_title"> <a href='/prolist.aspx?caid=<%#Eval("id") %>' style="color: #00CCFF"><%#Eval("caname") %> </div> <%--我们在大类循环的时候,添加一个隐藏域,用于给小类循环的时候传值--%> <asp:HiddenField ID="hfCaid" runat="server" Value='<%#Eval("id") %>' /> <asp:Repeater ID="repSmall" runat="server"> <ItemTemplate><a href='/prolist.aspx?caid=<%#Eval("id") %>'> <%#Eval("caname") %> </a></ItemTemplate> </asp:Repeater> </div> </ItemTemplate> </asp:Repeater>
然后我们给这个大的repeater加上一个 ItemDataBind事件,表示在大的rep循环的时候的事件,我们刚好可以用来对小的rep进行循环和绑定
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //显示最新上架 repNewSJ.DataSource = new DAL.ProductDAO().GetList("id,proname", "createdate", "desc", 10, 1, ""); repNewSJ.DataBind(); //先显示大的类别 repBig.DataSource = new Niunan.Shop.DAL.CategoryDAO().GetListArray("pid=0"); repBig.DataBind(); } } //循环大类的时候,通过 HiddenField 这个隐藏域来传值到 repSmall 小类进行循环 protected void repBig_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { //我们先通过repBig来找到 regSmall Repeater repSmall = e.Item.FindControl("repSmall") as Repeater; HiddenField hfCaid = e.Item.FindControl("hfCaid") as HiddenField; repSmall.DataSource = new Niunan.Shop.DAL.CategoryDAO().GetListArray("pid="+hfCaid.Value); repSmall.DataBind(); } }