好久没有用C#的服务器控件了,用了很久的EXT觉得做出的Tree很好看,所以对XML熟悉了不少,最近看了一本C#中有TreeView这个控件,觉得也不错,所以用XML数据方法动态加加载了几个树,如用户树,部门树,觉得也还可以,比较方便.
首先我们要把datatable中的数据库转成XML
首先我们要把datatable中的数据库转成XML
- public void SaveDeptXmlCache()
- {
- DataTable x1DataSource = YYsoft.FsydEbss.Global.Tree.Instance.GetDept().Tables[0];
- //DataTable x1DataSource = GetDept().Tables[0];
- string xml = GetDeptTree(x1DataSource, "0", "", "/r/n", 0);
- //FileHelp.SaveText("<?xml version=/"1.0/" encoding=/"utf-8/"?>" + xml, false, WebConfig.Instance.ConfigPath + String.Format(@"/datasource/DeptTree.All.xml"));
- YYsoft.FsydEbss2008.Common.FileHelp.SaveText("<?xml version=/"1.0/" encoding=/"gb2312/"?>" + xml, false, YYsoft.FsydEbss2008.Common.WebConfig.Instance.ConfigPath + String.Format(@"/Test/TestDept.xml"));
- }
- private string GetDeptTree(DataTable x1DataSource, string NodeId, string NodeName, string ExpandedNode,int a)
- {
- ExpandedNode += "/t";
- string node = String.Empty;
- DataRow[] dr = x1DataSource.Select(String.Format("User_Dept_Parent = {0}", NodeId));
- for (int i = 0; i < dr.Length; i++)
- {
- string x0 = dr[i]["User_Dept_ID"].ToString();
- string x1 = dr[i]["User_Dept_Name"].ToString();
- int k = a + 1;
- string x2 = GetDeptTree(x1DataSource, x0, x1, ExpandedNode, k);
- string x3 = dr[i]["OrderID"].ToString();//子节点数据
- string x4 = dr[i]["User_Dept_Parent"].ToString();//子节点数据
- string node11 = "node" + a.ToString();
- node += String.Format(ExpandedNode + "<" + node11 + " id=/"{0}/" name=/"{1}/" parent=/"{4}/" order=/"{3}/">{2}" + (x2 == String.Empty ? String.Empty : ExpandedNode) + "</" + node11 + ">", x0, x1, x2, x3, x4);
- }
- return node;
- }
我们可以得到以下XML树
- <?xml version="1.0" encoding="utf-8" ?>
- <node0 id="583" name="aaaa" parent="0" order=",583|,aaaa">
- <node1 id="101" name="bbb" parent="583" order=",583,">
- <node2 id="102" name="ccc" parent="101" order=",583,"></node2>
- <node2 id="151" name="ddd" parent="101" order=",583,"></node2>
- <node2 id="370" name="eee" parent="101" order=",583,"></node2>
- </node1>
- <node1 id="103" name="fff" parent="583" order=",583,">
- <node2 id="104" name="ggg" parent="103" order=",583,"></node2>
- <node2 id="105" name="hhh" parent="103" order=",583,"></node2>
- <node2 id="106" name="jjj" parent="103" order=",583,"></node2>
- <node2 id="152" name="iiii" parent="103" order=",583,103,"></node2>
- <node2 id="153" name="hhh" parent="103" order=",583,"></node2>
- <node2 id="371" name="adaf" parent="103" order=",583,"></node2>
- <node2 id="372" name="fasdf" parent="103" order=",583,"></node2>
- <node2 id="552" name="sdfsdaf" parent="103" order=",583,10"></node2>
- <node2 id="553" name="aaaad" parent="103" order=",583,"></node2>
- <node2 id="554" name="dsf" parent="103" order=",583,103"></node2>
- <node2 id="555" name="asdf" parent="103" order=",583,103"></node2>
- </node1>
- </node0>
后再把XML数据加载到TreeView中
- <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="TestDept.xml"></asp:XmlDataSource>
- <asp:TreeView ID="TreeView1" runat="server" DataSourceID="XmlDataSource1"></asp:TreeView>
- this.TreeView1.ShowLines = true;
- //以下是添加节点与数据源绑定的对应关系
- TreeNodeBinding node0 = new TreeNodeBinding();
- node0.DataMember = "node0";
- node0.ValueField = "name";
- this.TreeView1.DataBindings.Add(node0);
- TreeNodeBinding node1 = new TreeNodeBinding();
- node1.DataMember = "node1";
- node1.ValueField = "name";
- this.TreeView1.DataBindings.Add(node1);
- TreeNodeBinding node2 = new TreeNodeBinding();
- node2.DataMember = "node2";
- node2.ValueField = "name";
- this.TreeView1.DataBindings.Add(node2);
- TreeNodeBinding node3 = new TreeNodeBinding();
- node3.DataMember = "node3";
- node3.ValueField = "name";
- this.TreeView1.DataBindings.Add(node3);
- TreeNodeBinding node4 = new TreeNodeBinding();
- node4.DataMember = "node4";
- node4.ValueField = "name";
- this.TreeView1.DataBindings.Add(node4);