repeater可以嵌套么?
比如列表显示几个品牌,每个品牌显示几个产品,用什么方法做比较好?
网上有提过用repeater嵌套,我未试过,现在也不想去试,不想看代码,可以的话请用中文解析。

解决方案 »

  1.   

    可以嵌套!
    假如有两个td
    第一个td显示品牌
    第二个td在放个repeater
    显示产品
      

  2.   

    第二个reperter的数据源哪里来?用品牌ID再读一次数据库?
      

  3.   

    哦,那情有可原。
    在外层repeater的绑定事件中找到外层主键的ID,搜索内层repeater,然后再绑定数据源。
      

  4.   

    可以
    Repeater rpt = (Repeater)e.Item.FindControl("Repeater2");  
      

  5.   

    完全可以嵌套,还是有代码比较清晰。
     <asp:Repeater ID="rptTop" runat="server" OnItemDataBound="rptTop_ItemDataBound">                      
                               <SeparatorTemplate>
                                <br />
                               </SeparatorTemplate>
                               <ItemTemplate>
                               <img src="../img/RedDot.gif" />
                                <a href="SecendLeve.aspx?Id=<%#Eval("Id") %>&pId=<%= Request.QueryString["Id"].ToString()%>"><%#Eval("ClassName") %></a>
                                <div  style="margin:0px 0px 0px 30px">
                                <asp:Repeater ID="rptSecentContent" runat="server" >
                                    <SeparatorTemplate>
                                        <br />
                                    </SeparatorTemplate>
                                    <ItemTemplate>
                                    <img src="../img/pointD.jpg" alt="" />
                                        <a href="../Content/ThreeContent.aspx?ThreeId=<%#Eval("Id") %>&Id=<%=Request.QueryString["pId"].ToString() %>&pId=<%=Request.QueryString["Id"].ToString() %>">
                                        <%#Eval("Title").ToString().Length >8?Eval("Title").ToString().Remove(8)+"..." :Eval("Title") %></a>
                                    </ItemTemplate>
                                </asp:Repeater>
                                </div>
                               </ItemTemplate>
                            <FooterTemplate>
                            
                            </FooterTemplate>
                        </asp:Repeater>
      

  6.   

    repeater被解析为div,而div是肯定可以嵌套的
      

  7.   

    Repeater嵌套实例(完整)
      

  8.   

    可以 在第一个绑定的时候给第二个repeater 指定数据源就行了
      

  9.   

            protected void rptheme_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                if (e.Item.ItemType==ListItemType.Item)
                {
                    Repeater InnerRepeat = e.Item.FindControl("rpimage") as Repeater;
                    DataRowView Dr = (DataRowView)e.Item.DataItem;
                    string rpID = Dr["ID"].ToString();
                    Ds2.Tables[0].DefaultView.RowFilter = "CID=" + rpID;                SnowWolf.OleDBSqlHelper.OleDBSqlHelper Mycm = new SnowWolf.OleDBSqlHelper.OleDBSqlHelper();
                    string Sqlstr = "select [ID],[CID],[ImageName],[Title] from [V_Theme_Image] where [CID] in(@CID)";
                    System.Data.OleDb.OleDbParameter[] Param = new System.Data.OleDb.OleDbParameter[1];
                    Param[0] = new System.Data.OleDb.OleDbParameter("@CID", Convert.ToInt32(rpID));
                    DataSet Ds = Mycm.AccessDataSet(Sqlstr, Param);
                    Mycm.Dispose();                InnerRepeat.DataSource = Ds;
                    InnerRepeat.DataBind();
                }
            }<asp:Repeater ID="rptheme" runat="server" OnItemDataBound="rptheme_ItemDataBound">
                                <ItemTemplate>
                                    <li>
                                        <div class="pic">
                                            <a href="javascript:CreateOverlay(<%# DataBinder.Eval(Container.DataItem, "ID")%>)"
                                                >
                                                <img src="image/theme/<%# DataBinder.Eval(Container.DataItem, "ImageName")%>" alt=""
                                                    width="221" height="141"></a></div>
                                        <div class="caseText">
                                            <p>
                                                <%# DataBinder.Eval(Container.DataItem, "Title")%></p>
                                        </div>
                                    </li>
                                    <div style="display: none;" class="work<%# DataBinder.Eval(Container.DataItem, "ID")%>">
                                        <asp:Repeater ID="rpimage" runat="server">
                                            <ItemTemplate>
                                                <a href="image/theme/<%# DataBinder.Eval(Container.DataItem, "CID")%>/<%# DataBinder.Eval(Container.DataItem, "ImageName")%>"
                                                    title="<%# DataBinder.Eval(Container.DataItem, "Title")%>" class="pirobox_gall_work<%# DataBinder.Eval(Container.DataItem, "CID")%>">
                                                </a>
                                            </ItemTemplate>
                                        </asp:Repeater>
                                    </div>
                                </ItemTemplate>
                            </asp:Repeater>不知道为什么,只是第一个绑定了里面的repeater,后面的没有绑定。
      

  10.   

    建议用个隐藏域HiddenField保存父级的id
    使用的时候
     HiddenField hd = e.Item.FindControl("hdfID") as HiddenField;
    int id= Convert.ToInt32(hd.Value.ToString());
    然后用这个id作为绑定子级Repeater的条件