easyui +mvc +EF 怎样让tree的显示名称是父节点+子节点的形式?

xiaochong0507 2015-03-31 09:34:01
通过异步加载的方式显示tree,实现了所有目录显示的效果,但是想把节点显示名称改为父节点+子节点的完整路径名称形式,要怎样实现?贴上异步加载的代码,请指点!
private WbsProjectEntities db = new WbsProjectEntities();

/// <summary>
/// Gets the root node.
/// </summary>
/// <returns></returns>
/// <exception cref="System.NotImplementedException"></exception>
public TreeNode GetRootNode()
{
if (this.db.TreeNode.Any())
{
return this.db.TreeNode.FirstOrDefault(x => !x.parentID.HasValue);
}

return null;
}

/// <summary>
/// Gets the nodes.
/// </summary>
/// <param name="isReadAll">if set to <c>true</c> [is read all].</param>
/// <returns></returns>
/// <exception cref="System.NotImplementedException"></exception>
public IQueryable<TreeNode> GetNodes(bool isReadAll = false)
{
var query = this.db.TreeNode.AsQueryable();
if (!isReadAll)
{
return query.Where(x => x.IsEnable == true);
}
return query;
}
/// <summary>
/// Gets all json.
/// </summary>
/// <returns></returns>
/// <exception cref="System.NotImplementedException"></exception>
public string GetTreeJson()
{
List<JObject> jObjects = new List<JObject>();

var allNodes = this.db.TreeNode.Where(x => x.IsEnable == true).ToList();//IsEnable可以设置node是否显示的权限
if (allNodes.Any())
{
var rootNode = this.GetRootNode();
JObject root = new JObject
{
{"id", rootNode.ID.ToString()},
{"text", rootNode.Name} //json格式,并不是真的获取到Name
};
root.Add("children", this.GetChildArray(rootNode, allNodes));
jObjects.Add(root);
}
return JsonConvert.SerializeObject(jObjects);
}

/// <summary>
/// Gets the child array.
/// </summary>
/// <param name="parentNode">The parent node.</param>
/// <param name="nodes">The nodes.</param>
/// <returns></returns>
private JArray GetChildArray(TreeNode parentNode, IEnumerable<TreeNode> nodes)
{
JArray childArray = new JArray();

foreach (var node in nodes.Where(x => x.parentID == parentNode.ID))
{
node.Name += parentNode.Name;
JObject subObject = new JObject
{
{"id", node.ID.ToString()},
{"text",node.Name}//json格式
};

if (nodes.Where(y => y.parentID == node.ID).Any())
{
subObject.Add("children", this.GetChildArray(node, nodes));
}
childArray.Add(subObject);
}

return childArray;
}
/// <summary>
/// Gets the nodes.
/// </summary>
/// <param name="parentID">The parent ID.</param>
/// <returns></returns>
public string GetNodes(Nullable<int> ParentID)
{

List<JObject> jObjects = new List<JObject>();
if (!ParentID.HasValue)
{
var rootNode = this.GetRootNode();
JObject node = new JObject
{
{"id", rootNode.ID.ToString()},
{"text", rootNode.Name}, //获取到根目录名称
{"state", this.db.TreeNode.Any(x => x.parentID == rootNode.ID)
? "closed"
: "open" }
};
jObjects.Add(node);
}
else
{

var nodes = this.db.TreeNode
.Where(x => x.parentID == ParentID && x.IsEnable == true)
.ToList();

if (nodes.Any())
{
foreach (var item in nodes)
{

JObject node = new JObject
{
{"id", item.ID.ToString()},
{"text", item.Name},//获取到子目录名称
{"state", this.db.TreeNode.Any(x => x.parentID == item.ID)
? "closed"
: "open" }
};
jObjects.Add(node);
}
}
}
return JsonConvert.SerializeObject(jObjects);
}

}
...全文
303 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaochong0507 2015-04-16
  • 打赏
  • 举报
回复
引用 6 楼 starfd 的回复:
http://bbs.csdn.net/topics/391015868 取父节点+子节点的遍历方式在里面也有代码例子
请问下面代码我只实现了子节点+上一级节点的名称,菜鸟一枚,搞得云里雾里的,请指点一下: var nodes = this.db.TreeNode.Where(x => x.parentID == ParentID && x.IsEnable == true).ToList(); if (nodes.Any()) { foreach (var item in nodes) { var parentNode = this.db.TreeNode.Where(x => x.ID == ParentID && x.IsEnable == true).ToList(); foreach (var parentItem in parentNode) { JObject node = new JObject { {"id", item.ID.ToString()}, {"text",parentItem.Name + item.Name}, {"state", this.db.TreeNode.Any(x => x.parentID == item.ID) ? "closed" : "open" } }; jObjects.Add(node); } } }
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/391015868 取父节点+子节点的遍历方式在里面也有代码例子
  • 打赏
  • 举报
回复
引用 楼主 xiaochong0507 的回复:
通过异步加载的方式显示tree,实现了所有目录显示的效果,但是想把节点显示名称改为父节点+子节点的完整路径名称形式,要怎样实现?贴上异步加载的代码,请指点!
在你 node.Name += parentNode.Name; 和 subObject.Add("children", this.GetChildArray(node, nodes)); 这里设置断点,跟踪一下看看为什么Name不是“父节点+子节点的完整路径名称形式”。如果它原本输出的就是这样形式,那么就需要跟踪调试一下js代码,看看有没有用错属性。
  • 打赏
  • 举报
回复
public void GetAllTreeView()
        {
            EasyUIJsonTree root = new EasyUIJsonTree()
            {
                text = "菜单根节点"
            };
            IList<Model.MenuView> list = bll.FindAllView(this.Application.AppID);
            if (list != null && list.Count > 0)
            {
                this.GetTree(root, list);
            }
            Response.Write(JsonConvert.SerializeObject(new EasyUIJsonTree[] { root }));
        }

        private void GetTree(EasyUIJsonTree parent, IList<Model.MenuView> list, int? parentID = null)
        {
            var query = list.Where(m => m.Menu.ParentModuleID == parentID);
            if (query.Any())
            {
                if (parent.children == null)
                {
                    parent.children = new List<EasyUIJsonTree>();
                }
                foreach (Model.MenuView mv in query)
                {
                    EasyUIJsonTree child = new EasyUIJsonTree()
                    {
                        id = mv.ModuleID.ToString(),
                        text = mv.ModuleName,
                        attributes = new { Url = mv.Url }
                    };
                    parent.children.Add(child);
                    this.GetTree(child, list, mv.ModuleID);
                }
            }
        }
public class EasyUIJsonTree
    {
        public string id { get; set; }
        public string text { get; set; }
        //public string iconCls { get; set; }
        public IList<EasyUIJsonTree> children { get; set; }
        public object attributes { get; set; }
    }
xiaochong0507 2015-04-15
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
晚上回去我给你找一个以前写过的生成符合easyui树格式的json以及如何遍历成这个对象的方法
好的,谢谢你啊!
  • 打赏
  • 举报
回复
晚上回去我给你找一个以前写过的生成符合easyui树格式的json以及如何遍历成这个对象的方法
xiaochong0507 2015-04-15
  • 打赏
  • 举报
回复
有没有高手给指点一下啊

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧