Part1:Get a tree widget
Here are many useful tree widgets :http://www.ajaxline.com/best-javascript-tree-widgets
?
I chose the one which is easiest to use ---- dtree, through which I can create a powful tree by just importing the given dtree.js file.
?
Here is the official website of dtree and you can find api and examples:
http://destroydrop.com/javascripts/tree/
?
?添加一个节点,可以指定该节点跳转的URL,例子中没有写点击后,怎么执行一个js事件,补充一下:
?
//跳转到example01.html页面 d.add(10,9,'The trip to Iceland','example01.html','Pictures of Gullfoss and Geysir'); //执行alert d.add(11,9,'Mom\'s birthday','javascript:alert(\'bb\')');
?
这里javascript里面只能写单引号,再转意,因为dtree.js文件中用了双引号,如果写成javascript:alert(" bb" ),是搞不定的。
?
?
Part2:Write an ASP widget to get the data from webserver and pass them to dtree.
see the workout ~
?
First,write an asp page to allow the tree to be showed when certain button is clicked.
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript" src="dtree.js"></script> </head> <body> <form id="form1" runat="server"> <div> <asp:button Text="click" OnClick="AddBtn_Click" runat="server" /> </div> </form> </body> </html>
?Second, the cs file to fulfill the AddBtn_Click event, which would fetch the data from the web server and draw the proper tree with the help of dtree js.
?
?
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using com.Origin.Base.test.mywork.Tree; public partial class tree_Default : System.Web.UI.Page { private ITreeReaderFactory factory = new XMLTreeRreaderFactory(@"D:\\menu.xml"); protected void Page_Load(object sender, EventArgs e) { } public ITreeNode fetchRoot() { ITreeNode root = null; ITreeReader reader = factory.createTreeReader(); root = reader.createTree(); return root; } public void AddBtn_Click(object sender, EventArgs e) { string rootName = (string)fetchRoot().getAttribute("name"); string str = ""; str += "<script type='text/javascript' src='dtree.js'></script>"; str += "<script type='text/javascript'>"; str += " d = new dTree('d');"; ITreeNode root = fetchRoot(); //把树转换为dtree的格式 str += convertToDTree(root, null); //str += "d.add('用户管理',-1,'My example tree');"; //str += "d.add('创建用户','用户管理','My example tree');"; ////str += "d.add('创建员工','创建用户','创建员工');"; ////str += "d.add('创建客户','创建用户,'创建客户');"; str += "document.write(d);"; str += "</script>"; Response.Write(str); } public static string convertToDTree(ITreeNode root, string parent) { string name = (string)root.getAttribute("name"); string url = (string)root.getAttribute("url"); string add = ""; if (parent == null) { add = "d.add('" + name + "',-1,'" + name + "');"; } else { add = "d.add('" + name + "','" + parent + "','" + name + "');"; } IList<ITreeNode> subNodes = root.getSubNodes(); if (subNodes == null) { return add; } else { for (int i = 0; i < subNodes.Count; i++) { ITreeNode node = subNodes[i]; add += convertToDTree(node, name); } } return add; } }
?
OK~ the function is ...potboiled . Because there are many flaws and hard to be used. Next time I will make it widget and the path of the XML will not be hard coded any more. Also allow users to decide the words to math the key of name , url and so on. In conclusion , I will try to make the hard codes not be hard in the next version.
?