none
repeater的嵌套使用,如何绑定内层的数据?请求各位好汉帮忙!致谢! RRS feed

  • 问题

  • 数据库名:shaoxiao

    现有两个表:

    表1(a):id   title 

    表2(b):id  name  bid

    希望在<li>列表中外层显示表1的【title】,内层显示表2的【name】

    不知从何下手。刚各位高手帮我编写完整的代码,致谢!

    2010年10月11日 10:07

答案

  • 2010年10月11日 13:34
  • 你好:

    你只需要将第二个repeater控件放到第一个控件的ItemTemplate控件中。同时为第一个控件添加ItemDataBound事件,在事件中根据传值进行数据查询并绑定。


    <asp:Repeater id="rptCategories" runat="server">
      <HeaderTemplate>
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
      </HeaderTemplate>
      <ItemTemplate>
        <!--分类名称-->
        <tr><th><%# DataBinder.Eval(Container.DataItem, "TypeName") %></th></tr>
        <!--分类下的产品-->
        <asp:Repeater id="rptProduct" runat="server">
          <ItemTemplate>
            <tr><td><a href='ProductInfo.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "ID") %>'><%# DataBinder.Eval(Container.DataItem, "ProductName") %></a></td></tr>
          </ItemTemplate>
        </asp:Repeater>
      </ItemTemplate>
      <FooterTemplate>
        </table>
      </FooterTemplate>
    </asp:Repeater>

    private void rptCategories_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
    {
        BLL.Products products =new BLL.Products();
        if (e.Item.ItemType == ListItemType.Item ||    e.Item.ItemType == ListItemType.AlternatingItem) 
        {
            Repeater rptProduct = (Repeater) e.Item.FindControl("rptProduct");
            //找到分类Repeater关联的数据项
            DataRowView rowv = (DataRowView)e.Item.DataItem;
            //提取分类ID
            int CategorieId = Convert.ToInt32(rowv["ID"]);
            //根据分类ID查询该分类下的产品,并绑定产品Repeater
            rptProduct.DataSource = products.GetProductsByCategorieId(CategorieId);
            rptProduct.DataBind();
        }
    }

    http://tmouse.cnblogs.com/archive/2006/05/28/256274.html
    http://www.cnblogs.com/seebook/archive/2007/07/24/829691.html

    希望对你有所帮助。


    I am here!
    2010年10月13日 7:04
    版主

全部回复

  • 2010年10月11日 13:34
  • 你好:

    你只需要将第二个repeater控件放到第一个控件的ItemTemplate控件中。同时为第一个控件添加ItemDataBound事件,在事件中根据传值进行数据查询并绑定。


    <asp:Repeater id="rptCategories" runat="server">
      <HeaderTemplate>
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
      </HeaderTemplate>
      <ItemTemplate>
        <!--分类名称-->
        <tr><th><%# DataBinder.Eval(Container.DataItem, "TypeName") %></th></tr>
        <!--分类下的产品-->
        <asp:Repeater id="rptProduct" runat="server">
          <ItemTemplate>
            <tr><td><a href='ProductInfo.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "ID") %>'><%# DataBinder.Eval(Container.DataItem, "ProductName") %></a></td></tr>
          </ItemTemplate>
        </asp:Repeater>
      </ItemTemplate>
      <FooterTemplate>
        </table>
      </FooterTemplate>
    </asp:Repeater>

    private void rptCategories_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
    {
        BLL.Products products =new BLL.Products();
        if (e.Item.ItemType == ListItemType.Item ||    e.Item.ItemType == ListItemType.AlternatingItem) 
        {
            Repeater rptProduct = (Repeater) e.Item.FindControl("rptProduct");
            //找到分类Repeater关联的数据项
            DataRowView rowv = (DataRowView)e.Item.DataItem;
            //提取分类ID
            int CategorieId = Convert.ToInt32(rowv["ID"]);
            //根据分类ID查询该分类下的产品,并绑定产品Repeater
            rptProduct.DataSource = products.GetProductsByCategorieId(CategorieId);
            rptProduct.DataBind();
        }
    }

    http://tmouse.cnblogs.com/archive/2006/05/28/256274.html
    http://www.cnblogs.com/seebook/archive/2007/07/24/829691.html

    希望对你有所帮助。


    I am here!
    2010年10月13日 7:04
    版主
  • 谢谢你!
    2010年10月19日 7:54