ASP.NET 2.0 中實現 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();
}
}
}
}
-------------------------------------------------------
我的其他文章在我的個人網站上:
"十萬個為什麼"電腦學習網:http://www.why100000.com
張慶 zhangking@hotmail.com,QQ:9365822
http://why100000.com
http://sogo99.com
2006.1.10