菜单,字典,等多层级关系的数据排序
前言:搭建后台管理网站菜单管理页面的时候,涉及到菜单的一个排序,一开始的设计是,用数字排序,新增的时候,查找最大的加一,但是这样,对于多层级的排序不方便,如果中途删除一个菜单,重排序也不方便。
所以使用字母排序(有一个弊端就是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 !=<