在软件开发过程中,有遇到过树形菜单节点排序问题,如节点上移、节点下移。
以下是一种实现方式,请工程师们审查是否合理!
public class NodeInfoEntity { /// <summary> /// id /// </summary> [Column(Name = "id")] public string Id{ get; set; } /// <summary> /// 排序号 /// </summary> [Column(Name = "sort")] public int Sort { get; set; } /// <summary> /// 父级ID /// </summary> [Column(Name = "pid")] public string Pid { get; set; } }
var model=new NodeInfoEntity(); mode.Id="1"; model.Sort=2; var list = _fsql.Select<NodeInfoEntity>() .Where(x => x.Pid.Equals(model.Pid)).OrderBy(x => x.Sort).ToList(); // 查看是上移还是下移 var isUp = model.Sort > sort ? true : false; for (int i = 0; i < list.Count; i++) { // 如果不是移动的节点 if (!list[i].Id.Equals(id)) { // 如果节点顺序大于sort,这个节点顺序+1,往后排 if (list[i].Sort > sort) { list[i].Sort += 1; } else if (list[i].Sort == sort) { // 如果是上移 if (isUp) { list[i].Sort += 1; } // 如果是下移 else { list[i].Sort -= 1; } } // 如果节点顺序小于sort,这个节点等于i,往前排 else { list[i].Sort = i; } } // 如果是移动的节点 else if (list[i].Id.Equals(id)) { list[i].Sort = sort; } } // 重新排序 list = list.OrderBy(x => x.Sort).ToList(); for (int i = 0; i < list.Count; i++) { list[i].Sort = i; list[i].UpdateTime = DateTime.Now; } _fsql.Update<NodeInfoEntity>() .SetSource(list) .UpdateColumns(a => new { a.Sort}) .ExecuteAffrows();
标签:Sort,sort,菜单,list,id,public,树形,节点 From: https://www.cnblogs.com/heimalang/p/18372951