`TreeView` 顯示階層式資料,每個節點為 `TreeNode`,具備 `Text` (顯示文字)、`Value` (隱藏值)、`NavigateUrl` (導航目標)、`Target` (開啟目標視窗)、`ImageUrl` (圖示) 等屬性。
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;
TreeView1.ShowLines = true;
TreeNode root = new TreeNode("產品分類", "0");
root.Expanded = true;
TreeNode electronics = new TreeNode("電器類", "1") { NavigateUrl = "~/Electric.aspx" };
root.ChildNodes.Add(electronics);
TreeNode food = new TreeNode("食品類", "2") { NavigateUrl = "~/Food.aspx" };
TreeNode fruit = new TreeNode("水果", "21") { NavigateUrl = "~/Fruit.aspx" };
TreeNode vegetable = new TreeNode("蔬菜", "22") { NavigateUrl = "~/Vegetable.aspx" };
food.ChildNodes.Add(fruit);
food.ChildNodes.Add(vegetable);
root.ChildNodes.Add(food);
TreeNode daily = new TreeNode("日用品類", "3") { NavigateUrl = "~/Commodity.aspx" };
root.ChildNodes.Add(daily);
TreeView1.Nodes.Add(root);
}
| 屬性/事件 | 說明 |
|---|---|
| ShowLines | 顯示節點連線 (樹狀圖線條) |
| ShowExpandCollapse | 顯示展開/摺疊圖示 (+/-) |
| NodeIndent | 子節點縮排像素 (預設 19) |
| ExpandDepth | 初始展開層級 (0=僅根節點, -1=全部展開) |
| SelectedNodeChanged | 節點被選取時觸發 (需 `SelectAction="Select"`) |
| TreeNodePopulate | 動態載入子節點事件 (配合 `PopulateOnDemand="true"`) |
| SelectedNodeStyle / HoverNodeStyle | 選取/懸停節點樣式 |
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
string parentId = e.Node.Value;
// 從資料庫查詢子分類
DataTable dt = GetCategories(parentId);
foreach (DataRow row in dt.Rows)
{
TreeNode child = new TreeNode(row["Name"].ToString(), row["Id"].ToString())
{
NavigateUrl = $"~/Category.aspx?id={row["Id"]}",
PopulateOnDemand = HasChildren(row["Id"]) // 遞歸判斷
};
e.Node.ChildNodes.Add(child);
}
e.Node.PopulateOnDemand = false; // 已載入,關閉按需載入
}
TreeView 靜態節點適合結構固定的導航選單,聲明式標記最直觀;動態建立適合權限控制、多語系;`PopulateOnDemand` 解決大量節點效能問題;`SiteMapDataSource` 整合站點地圖提供統一導航資料源。依專案需求選擇適當方式。