首页 > 技术文章 > .NET ASP.NET无限级分类(递归方法)

qq43434300 2019-10-23 15:25 原文

  1. 分类表:
    在这里插入图片描述
    在这里插入图片描述
  2. 添加分类页面:
    效果图:
    在这里插入图片描述在这里插入图片描述选择一级分类时则添加的是一级分类,选择其他的则代表选择的父级(上级)分类,类别名称为在选择的分类下要添加的子类(下级)
    后台主要代码:
 protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                try
                {
                    Model.ProductCategory procate = new Model.ProductCategory();//实体类
                    if(Request.Form["classup"].ToString().Replace("-","") == "一级分类")//获取选择的类别判断是否添加的是一级分类
                    {
                        procate.UpID = 0;//添加一级分类的话上级id=0
                        procate.Name = Request.Form["newscateparent"];
                        procate.Level = 1;
                       

                    }
                    else//表示选择的不是一级分类
                    {
                        procate.UpID = productcate_manager.select_productcate_name(Request.Form["classup"].ToString().Replace("-", "")).ID;//通过下拉选择的名称查询他的id作为添加的分类的上级id(select_productcate_name()方法通过分类名称查询分类表)
                        procate.Name = Request.Form["newscateparent"];//获取要添加的分类名称
                        procate.Level = productcate_manager.select_productcate_name(Request.Form["classup"].ToString().Replace("-", "")).Level + 1;//在上级的分类级别上加1
                    }
                    if (procate.Name != "")
                    {
                        if (productcate_manager.insert_productcategory(procate))//添加分类
                        {
                            Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('添加成功!');location.href='SelectProductCategory.aspx';</script>");//添加成功跳转到查询页面
                        }
                        else
                        {
                            Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('添加失败,名称不能为空!');</script>");
                            NewMethod();
                        }
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('添加失败,名称不能为空!');</script>");
                        NewMethod();
                    }
                }
                catch
                {
                    Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('添加失败,名称不能为空!');</script>");
                    NewMethod();
                }
            }
            else
            {
                NewMethod();//加载时绑定下拉数据
            }
        }

        private void NewMethod()
        {
            StringBuilder sb = new StringBuilder();
            DataTable  table1 = productcate_manager.select_productcategory();//获取所有的产品分类
            DataRow[] rows = table1.Select("UpID=0");
            sb.Append("<select name =\"classup\" id =\"class_up\" runat =\"server\" >");
            sb.Append("<option>一级分类</option>");
            foreach (DataRow dr in rows)
            {
                string id = dr["ID"].ToString();
                string name = dr["Name"].ToString();
                int level = (int)dr["Level"];
                string gang = "----";
                for (int i = 0; i < level; i++)
                {
                    gang = gang + "----";
                }
                sb.AppendFormat("<option>{0}</option>",gang + name);
                sb.Append(GetSubMenu(id, table1));
            }
            sb.Append("</select>");
            _menu = sb.ToString();
        }
        private string GetSubMenu(string pid, DataTable dt)
        {
            StringBuilder sb = new StringBuilder();
            DataRow[] rows = dt.Select("UpID=" + pid);
            foreach (DataRow dr in rows)
            {
                string id = dr["ID"].ToString();
                string name = dr["Name"].ToString();
                int level = (int)dr["Level"];
                string gang = "----";
                for (int i = 0; i < level; i++)
                {
                    gang = gang + "----";
                }
                sb.AppendFormat("<option>{0}</option>", gang + name);
                sb.Append(GetSubMenu(id, dt));  //递归
            }
            return sb.ToString();
        }

页面:
在这里插入图片描述
3. 展示产品分类页面:
效果图:
在这里插入图片描述在这里插入图片描述页面代码及部分样式:
在这里插入图片描述在这里插入图片描述在这里插入图片描述删除编辑跳转:在这里插入图片描述后台:

protected void Page_Load(object sender, EventArgs e)
{   
     if (!IsPostBack)
     {
         ListMenu();
     }  
 }
public void ListMenu()
{
    StringBuilder sb = new StringBuilder();
    DataTable table = new DataTable();
    table = procate_manager.select_productcategory();//获取分类那张表
    DataRow[] rows = table.Select("UpID=0");
    foreach (DataRow dr in rows)
    {
        string id = dr["ID"].ToString();
        string name = dr["Name"].ToString();
        int level = (int)dr["Level"];
        string gang = "|———";
        for(int i = 0; i < level; i++)
        {
            gang = gang + "———";
        }
        sb.AppendFormat("<li style=\"line-height:30px; \"><i class=\"icon\"></i>{1}&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"button\" class=\"delebtn \" did=\"{0}\" value=\"删除\" style=\"background:#1aa97b;border: 1px solid #1424a9;padding: 3px 6px;color: #fff;border-radius: 3px;\"/><input type=\"button\" class=\"updatebtn\" uid=\"{0}\" value=\"编辑\"style=\"background:#1aa97b;border: 1px solid #1424a9;padding: 3px 6px;color: #fff;border-radius: 3px;\" />", id,gang+name);
        sb.Append(GetSubMenu(id, table));
        sb.Append("</li>\r\n");
    }
    _menu = sb.ToString();

}
private string GetSubMenu(string pid, DataTable dt)
{
    StringBuilder sb = new StringBuilder();
    DataRow[] rows = dt.Select("UpID=" + pid);
    sb.Append("<ul style=\"display:none\">\r\n");
    foreach (DataRow dr in rows)
    {
        string id = dr["ID"].ToString();
        string name = dr["Name"].ToString();
        int level = (int)dr["Level"];
        string gang = "|———";
        for (int i = 0; i < level; i++)
        {
            gang = gang + "———";
        }
        sb.AppendFormat("<li style=\"line-height:30px; \"><i class=\"icon\"></i>{1}&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"button\" class=\"delebtn \" did=\"{0}\" value=\"删除\" style=\"background:#1aa97b;border: 1px solid #1424a9;padding: 3px 6px;color: #fff;border-radius: 3px;\"/><input type=\"button\" class=\"updatebtn\" uid=\"{0}\" value=\"编辑\" style=\"background:#1aa97b;border: 1px solid #1424a9;padding: 3px 6px;color: #fff;border-radius: 3px;\" />", id,gang+name);
        sb.Append(GetSubMenu(id, dt));  //递归
        sb.Append("</li>\r\n");
    }
    sb.Append("</ul>\r\n");
    return sb.ToString();
}

index_bg:
在这里插入图片描述

推荐阅读