日期:2014-05-17  浏览次数:20527 次

asp.net无限递归分类问题,新手请教。。。
我想做个无限级的子分类
数码
--手机
---诺基亚
----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/>");

这样根本无法实现无限分类,我是新手,请求高手指导,谢谢

------解决方案--------------------
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/>");

}
  
}


这样试试?
------解决方案--------------------
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/>");

}