菜单,字典,等多层级关系的数据排序

本文介绍了如何处理菜单、字典等多层级关系的数据排序问题,包括新增、删除和拖动排序。为了避免数字排序的不便,采用字母排序策略,但存在层级限制。删除操作后,子节点自动前移保持顺序;拖动排序功能允许在同一层级调整节点位置,实现快速重新排序。
摘要由CSDN通过智能技术生成

菜单,字典,等多层级关系的数据排序

前言:搭建后台管理网站菜单管理页面的时候,涉及到菜单的一个排序,一开始的设计是,用数字排序,新增的时候,查找最大的加一,但是这样,对于多层级的排序不方便,如果中途删除一个菜单,重排序也不方便。

所以使用字母排序(有一个弊端就是A-Z,同一层级只能有26的节点,后续会考虑解决这个问题)图中的排序直接使用数据库排序,就会自动按顺序排,无需考虑其他逻辑。例如:在这里插入图片描述
图中的排序是自动生成的,方便比较,菜单名称等一开始我写成了与排序一样的文本,方便后期删除之后的对比,还有拖动排序之后的对比。

1.新增

#region 新增时根据要求获取新的排序
private string CreateSort(string parentID)
{
   
    //查找与之父节点相同的所有节点
    string menuSort = "";
    var menu = db.Menu.Where(d => d.ParentID == parentID).Select(d => d.Sort);
    if (menu.Count() > 0)
    {
   
        // 如果找到,说明已存在子节点,就去找最大的哪一个,找到之后直接数学运算加一
        // 例如 查到AB,加一就是AC,查到AAB,加一就是AAC
        // 最大的排序节点
        var maxSort = menu.Max();
        menuSort = GetNewSort(maxSort, SortType.Down);
    }
    else
    {
   
        // 如果找不到,说明还没有子节点,需创建排序编号
        Menu menu2 = db.Menu.Where(d => d.MenuID == parentID).FirstOrDefault();
        if (menu2 !=<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值