有两张表,一张表是分类表包含 id name parentsid 另外一张表是产品表,里面有产品表id,分类表id以及其他对应的各种产品信息。然后我要实现的效果是,点击大的分类,通过URL传输过来id。
然后怎么利用这个parentid实现如下显示:
1、label:这个parentid对应的大分类名称
2、label:这个parentid对应的小分类名称
3、datalist:这个parentid对应的小分类的下的所有产品
                               。
                               。2,3重复
                               。
直到这个大分类下所有的小分类及其所有产品显示完毕为止。。第1点没问题,重点是在第2,第3
我百度问了一下,说什么循环。。 新手,没看明白
我自己想了一下,2,3是不是可以用datalist嵌套datalist来做,可是第二个datalist不会搞。。
求高手们帮帮忙,谢谢了~~~

解决方案 »

  1.   

    datalist嵌套也可以你先学会用datalist吧。datalist使用
      

  2.   

    datalist嵌套datalist,
    外层datalist绑定父信息,根据外层的父id绑定子信息
      

  3.   

    我先在的写法是: 前台<asp:DataList runat="server" Id="DataList1" GridLines="Both" Bordercolor="#cfcfcf" cellpadding="0"
                    cellspacing="0" 
                     Font-Size="11" ForeColor="#000" RepeatColumns="1">
                 
                    <ItemTemplate>
                        <a class="fl" href="zflxs.aspx?id=<%# DataBinder.Eval(Container, "DataItem.分类表ID") %>" style="float:left;"><%# DataBinder.Eval(Container, "DataItem.分类产品名称") %></a>
                      <br />
                            <asp:DataList ID="DataList2" runat="server" DataKeyField="sp_WareID" 
                RepeatColumns="3" RepeatDirection="Horizontal" Width="100%" DataSource='<%# (Container.DataItem as System.Data.DataRowView).Row.GetChildRows("myRelation") %>'>
            <ItemTemplate>
            <table><tr>
            <td align="center" colspan="3" style="width:207px;height:75px">
            <asp:Image ID="Image1" runat="server"  style="width:60px;height:75px" ImageUrl='<%#Eval("产品详细表图片") %>' /></td>
            </tr>
            <tr>
            <td align="center" colspan="3" style="width:207px">
            <asp:Label ID="sp_WareNameLabel" runat="server" Text='<%#Eval("产品详细表产品名称") %>'></asp:Label></td>
            </tr>
            <tr>
            <td align="center" colspan="3" style="width:207px">当前价格:
            <asp:Label ID="sp_PriceLabel" runat="server" Text='<%#Eval("产品详细表产品价格") %>'></asp:Label>元</td>
            </tr>
            <tr>
            <td align="center" colspan="3" style="width:207px">
                <a href="WareDetail.aspx?wareID=<%#DataBinder.Eval(Container.DataItem,"产品详细表产品ID") %>"><asp:Button ID="Button1" runat="server" Text="详细" /></a>&nbsp;<a style="font-size:small" href='WareShoppingCart.aspx?wareID=<%#DataBinder.Eval(Container.DataItem,"sp_WareID") %>'><asp:Button ID="Button2"
                    runat="server" Text="购买" /></a></td>
            </tr>
            </table>
            </ItemTemplate>
            </asp:DataList>
                    </ItemTemplate>
                </asp:DataList>后台: private void BindList()
        {
            string connstr = ConfigurationManager.ConnectionStrings["SuperMarketDB"].ConnectionString;
            SqlConnection cn = new SqlConnection(connstr);
            cn.Open();
            string id = Request.QueryString["点击大分类后传过来的ID"];
            DataSet ds = new DataSet();
            string sql1 = "select 分类表ID,分类表分类名 from 分类表 where 父ID in (select 分类表ID from 分类表 where 父ID='" + 点击大分类后传过来的ID.Trim() + "')";
            SqlDataAdapter sda1 = new SqlDataAdapter(sql1, cn);
            sda1.Fill(ds, "T_WareType");
            string sql2 = "select 产品详细表ID, 分类表ID, 产品详细表产品名, 产品详细表产品价格, 产品详细表产品图片 from 产品详细表";
            SqlDataAdapter sda2 = new SqlDataAdapter(sql2, cn);
            sda2.Fill(ds, "T_Ware");
            cn.Close();
            ds.Tables[0].TableName = "T_WareType";
            ds.Tables[1].TableName = "T_Ware";        DataRelation ordersToOrderDetails = ds.Relations.Add("myRelation", ds.Tables["T_WareType"].Columns["分类表ID"], ds.Tables["T_Ware"].Columns["分类表ID"],false);        DataList1.DataSource = ds.Tables["T_WareType"];
            DataList1.DataBind();
        }运行后没错误,但是看不到任何东西 就是都没有显示 这是什么原因呢? 没告诉datalist2要怎么显示?  要怎么弄呢。。 求高手们帮帮忙 谢谢了~~~
      

  4.   

    居然看到了同样问题的人- -可惜 我比你更悲剧一点 我的ID都是GUID类型的
      

  5.   

    看来你的这个得三层Repeater嵌套了,刚给另外一个写了一个2层嵌套的,你在基础上再增加一层吧。http://topic.csdn.net/u/20110819/12/61aed41f-5faa-4dd1-994b-80c8ed8de3d2.html
      

  6.   

    嗯 我跟你不同的是 我做的是一个资源管理系统 现在就差你说的这个功能了 一直在疼着
    我的树的最高节点就是一个根目录 这个根目录是我上传到服务器的文件夹 选中它点击添加文件夹
    根目录
         文件1
    点击文件1 里面右边出现相应列表 显示上传文件的信息..
    界面类似windows资源管理器 一直等着有高手解决-= -
      

  7.   

    递归呗
    例子是输入一级大类别递归输出目录树
        //private string OutPutNewsKind(IList<NewsKind> kindList)
        //{
        //    StringBuilder sb = new StringBuilder();
        //    sb.Append("<ul>");
        //    foreach (NewsKind nk in kindList)
        //    {
        //        //子类列表
        //        IList<NewsKind> subKind = (new SDPPCEntities()).NewsKind.Where(n => n.FkindID == nk.KindID).ToList();
        //        //输出树结构
        //        sb.Append("<li><span class=\"");
        //        sb.Append(subKind.Count > 0 ? "folder" : "file");
        //        sb.Append("\">");
        //        sb.Append("<a href=\"/ccenter/article/default.aspx?kind=");
        //        sb.Append(nk.KindID);
        //        sb.Append("\">");
        //        sb.Append(nk.KindName);
        //        sb.Append("</a>");
        //        sb.Append("</span>");
        //        //递归子类输出
        //        if (subKind.Count > 0)
        //        {
        //            sb.Append(OutPutNewsKind(subKind));
        //        }
        //        sb.Append("</li>");
        //    }
        //    sb.Append("</ul>");
        //    return sb.ToString();
        //}
      

  8.   


    我第1点用了label直接接收了,第2 3点用2层datalist来做,原来有个分类可以实现,但是把代码搬过来就显示不了 不知道怎么回事。