我想做个无限级的子分类
数码
--手机
---诺基亚
----920
服装
--鞋子
---运动鞋按这个样子来嵌套显示,,我的源代码是
            Response.Write("<select name=\"category\" value=\"0\">\n");
            if (dt.Rows.Count > 1)
            {
                //第一层开始
                foreach (DataRow dr in dt.Rows)
                {
                    Response.Write("<option value=\"" + dr["id"].ToString() + "\">" + dr["name"].ToString() + "</option>\n");
                    //第二层开始
                    DataTable dt1 = ad.SelectCategory(dr["id"].ToString());
                    if (dt1.Rows.Count > 0)
                    {
                        foreach (DataRow dr1 in dt1.Rows)
                        {
                            Response.Write("<option value=\"" + dr1["id"].ToString() + "\">-" + dr1["name"].ToString() + "</option>\n");
                            //第三层开始
                            DataTable dt2 = ad.SelectCategory(dr1["id"].ToString());
                            if (dt2.Rows.Count > 0)
                            {
                                foreach (DataRow dr2 in dt2.Rows)
                                {
                                    Response.Write("<option value=\"" + dr2["id"].ToString() + "\">--" + dr2["name"].ToString() + "</option>\n");
                                }
                            }
                            //第三层结束
                        }
                    }
                    //第二层结束
                }
                //第一层结束
            }
            else
            {
                Response.Write("<option value=\"0\">一级分类</option>\n");
            }
            Response.Write("</select><br/>");这样根本无法实现无限分类,我是新手,请求高手指导,谢谢

解决方案 »

  1.   

    void buildTree(string parentId)

      DataTable dt = ad.SelectCategory(string parentId);  if (dt.Rows.Count > 1)
      {
      Response.Write("<select name=\"category\" value=\"0\">\n");
      //第N层开始
      foreach (DataRow dr in dt.Rows)
      {
      Response.Write("<option value=\"" + dr["id"].ToString() + "\">" + dr["name"].ToString() + "</option>\n");
      buildTree(dr["id"].ToString() )
      }
       Response.Write("</select><br/>");  }
      
    }
    这样试试?
      

  2.   

    private void main(DataTable dt){
      foreach (DataRow dr in dt.Rows)
      {
      Response.Write("<option value=\"" + dr["id"].ToString() + "\">" + dr["name"].ToString() + "</option>\n");
    main(ad.SelectCategory(dr["id"].ToString()));
      }
    }
    private void page(){  
    Response.Write("<select name=\"category\" value=\"0\">\n");
    main(dt);
      Response.Write("</select><br/>");}