asp.net|treeview|資料|資料庫 編程思想: 每條記錄代表一個節點。通過表裡的 2 個數字型的核心欄位 f_NodeId、f_ParentNodeId 形成邏輯上的層次型關係。約定 0 代表根節點。其他欄位為輔助欄位,與本文關係不大。定義和初始化一對象數組 myNodes,然後一次性讀取表中的記錄,通過判斷當前節點的父節點,依次建立所有的上下級關係。樣本資料:運行結果:樣本下載:http://www.why100000.com/_ftps/samples/Tree+db.rar(代碼調試環境:Visual Web Developer 2005 Express Edition)Access資料庫名:db_system.mdb表名:tabItems表結構: f_i_autoid 自動編號 f_NodeId 數字(本節點ID) f_ParentNodeId 數字(父節點ID) f_Name 文本 f_Tag 文本 f_Url 文本 f_order 數字 f_isHidden 文本 f_datetime 日期/時間
關鍵代碼:using System;using System.Data;using System.Data.OleDb;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string sDbPath = "./db_system.mdb"; //" string sPassword = ""; string sDbTable = "tabItems"; OleDbConnection oConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(sDbPath) + ";Password=" + sPassword + ";"); OleDbDataReader oDr;
try { oConn.Open(); OleDbCommand oCmd = new OleDbCommand("select * from " + sDbTable, oConn); // + " order by f_level" oDr = oCmd.ExecuteReader();
//定義對象數組 TreeNode[] myNodes = new TreeNode[100];
//初始化對象數組 for (int i = 0; i < myNodes.Length; i++) { myNodes[i] = new TreeNode(); }
//從表中取資料 while (oDr.Read()) { int iParentNodeId = (int)oDr["f_ParentNodeId"]; int iMyNodeId = (int)oDr["f_NodeId"];
if (iParentNodeId != 0) { myNodes[iMyNodeId].Text = oDr["f_name"].ToString(); myNodes[iMyNodeId].NavigateUrl = oDr["f_url"].ToString(); myNodes[iParentNodeId].ChildNodes.Add(myNodes[iMyNodeId]); } else { myNodes[iMyNodeId].Text = oDr["f_name"].ToString(); myNodes[iMyNodeId].SelectAction = TreeNodeSelectAction.None; TreeView1.Nodes.Add(myNodes[iMyNodeId]); } } }
catch (System.Exception sqle) { sqle.ToString().Replace("\n", "<br>"); Response.Write(sqle); } finally { oConn.Close(); }
}
}}