首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# XML 動態遞歸綁定 TreeView 完整實作

     編輯:關於C#

XML 資料結構範例




  
    
    
  
  
    
    
  

WinForms 遞歸綁定


using System.Windows.Forms;
using System.Xml;

public void BindXmlToTreeView(string xmlPath, TreeView treeView)
{
    var doc = new XmlDocument();
    doc.Load(xmlPath);
    treeView.Nodes.Clear();
    BindNode(doc.DocumentElement, treeView.Nodes);
}

private void BindNode(XmlNode xmlNode, TreeNodeCollection parentNodes)
{
    foreach (XmlNode node in xmlNode.ChildNodes)
    {
        if (node.NodeType != XmlNodeType.Element) continue;

        var tn = new TreeNode(node.Attributes["Text"]?.Value ?? node.Name);
        tn.Tag = node.Attributes["Url"]?.Value; // 儲存導航資訊

        if (node.HasChildNodes)
            BindNode(node, tn.Nodes);

        parentNodes.Add(tn);
    }
}

// 節點點擊導航
private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
    if (e.Node.Tag is string url && !string.IsNullOrEmpty(url))
        NavigateTo(url); // 實作頁面跳轉
}

WPF 資料繫結 (MVVM 推薦)



public class MenuItemVm
{
    public string Text { get; set; }
    public string Url { get; set; }
    public ObservableCollection Children { get; } = new();
}

// 遞歸建立 ViewModel
public MenuItemVm BuildMenu(XmlNode node)
{
    var vm = new MenuItemVm { Text = node.Attributes["Text"]?.Value, Url = node.Attributes["Url"]?.Value };
    foreach (XmlNode child in node.ChildNodes)
        if (child.NodeType == XmlNodeType.Element)
            vm.Children.Add(BuildMenu(child));
    return vm;
}



    
        
            
        
    

ASP.NET WebForms TreeView 控制項



    
        
    


效能優化:大量節點虛擬化

  • WinForms:`treeView.BeginUpdate()` / `EndUpdate()` 批次新增。
  • WPF:`VirtualizingStackPanel.IsVirtualizing="True"` (需 `ItemsControl` 容器)。
  • 延遲載入:節點展開時才載入子節點 (Tag 儲存 XPath/ID,`BeforeExpand` 事件動態查詢 XML/DB)。

總結

XML → TreeView 核心在於 **遞歸遍歷 `XmlNode`** 對應 **遞歸建立 `TreeNode`/`MenuItemVm`**。WinForms 用 `XmlDocument` + 手動遞歸;WPF 採用 `HierarchicalDataTemplate` + ViewModel 分離關注點;WebForms 直接 `XmlDataSource` + `TreeNodeBinding` 零程式碼。大量資料請啟用虛擬化與延遲載入。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved