using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.OleDb; using System.Data; using System.Diagnostics; namespace treeTest { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { TreeView1.SelectedNodeChanged += new EventHandler(TreeView1_SelectedNodeChanged); //葉面初始化時取根節點 if (TreeView1.Nodes.Count == 0) { DbConnect(); } } protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e) { DbConnect3(e.Node); } void TreeView1_SelectedNodeChanged(object sender, EventArgs e) { return; } //葉面初始化時取根節點 private void DbConnect() { string dataConStr = "Provider=microsoft.jet.oledb.4.0;Data Source=" + Server.MapPath("tree.mdb") + ";User ID=;Password=;"; OleDbConnection Con = new OleDbConnection(dataConStr); //根节点 string cmdstr = "select * from tree where parentId is null or parentId=''"; OleDbCommand cmd = new OleDbCommand(cmdstr, Con); try { Con.Open(); OleDbDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { TreeNode parenNode = new TreeNode(); parenNode.Text = reader["treeId"].ToString(); parenNode.Expanded = false; TreeView1.Nodes.Add(DbConnect2(parenNode)); } } catch (Exception ex) { Debug.WriteLine(ex); } finally { if (Con.State != ConnectionState.Closed) Con.Close(); } } //判斷是否還有子節點 private TreeNode DbConnect2(TreeNode parenNode) { string dataConStr = "Provider=microsoft.jet.oledb.4.0;Data Source=" + Server.MapPath("tree.mdb") + ";User ID=;Password=;"; string cmdstr = "select distinct treeId from tree where parentId='" + parenNode.Text + "'"; OleDbConnection con = new OleDbConnection(dataConStr); OleDbCommand cmd = new OleDbCommand(cmdstr, con); con.Open(); OleDbDataReader reader = cmd.ExecuteReader(); if (reader.Read()) { TreeNode childNode = new TreeNode(); parenNode.ChildNodes.Add(childNode); } reader.Close(); con.Close(); return parenNode; } //黨節點展開時去取子節點 private TreeNode DbConnect3(TreeNode parenNode) { if (parenNode.ChildNodes.Count == 1) { parenNode.ChildNodes.Clear(); string dataConStr = "Provider=microsoft.jet.oledb.4.0;Data Source=" + Server.MapPath("tree.mdb") + ";User ID=;Password=;"; string cmdstr = "select distinct treeId from tree where parentId='" + parenNode.Text + "'"; OleDbConnection con = new OleDbConnection(dataConStr); OleDbCommand cmd = new OleDbCommand(cmdstr, con); con.Open(); OleDbDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { TreeNode childNode = new TreeNode(); childNode.Text = reader["treeId"].ToString(); parenNode.Expanded = true; parenNode.ChildNodes.Add(childNode); DbConnect2(childNode); } reader.Close(); con.Close(); } return parenNode; } } }