一個快捷訪問 TreeView 控件節點的幫助

Web 開發中經常用到 TreeView 控件,一個很常見的操作就是遍歷所有的節點。但是該控件本身並未提供此功能,每次都要手工寫遞歸訪問的函數,非常煩瑣。所以我寫了一個簡單的幫助類來解決這個問題,這樣就不需要每次用遞歸來訪問了:

using System;
using System.Data;
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;
using System.Collections.Generic;

namespace CmsNet2.Components {
    
/// <summary>
    
/// TreeViewVisitor by Neil Chen, 2006-09-28
    
/// </summary>
    public class TreeViewVisitor {

        
public TreeViewVisitor(TreeView treeView) {
            
this.treeView = treeView;
        }

        
private TreeView treeView;

        
public TreeView TreeView {
            
get { return treeView; }
            
set { treeView = value; }
        }

        
private void Walk(TreeNode node) {
            
if (node == null) {
                nodes.Add(treeView.Nodes[
0]);

                
foreach (TreeNode childNode in treeView.Nodes[0].ChildNodes) {
                    Walk(childNode);
                }
            } 
else {
                nodes.Add(node);

                
foreach (TreeNode childNode in node.ChildNodes) {
                    Walk(childNode);
                }
            }                        
        }

        
private List<TreeNode> nodes;

        
public IEnumerable<TreeNode> GetAllTreeNodes() {
            nodes 
= new List<TreeNode>();

            Walk(
null);

            
foreach (TreeNode node in nodes) {
                yield 
return node;
            }
        }
    }
}

一個簡單的使用範例:遍歷所有節點,並將符合條件的節點選中。

public void SetCheckedCategories(List<Category> categories) {
    
// 創建訪問器對象
    TreeViewVisitor visitor = new TreeViewVisitor(tvCategories);
    
    
// 得到“鋪平”了的所有節點集合
    IEnumerable<TreeNode> nodes = visitor.GetAllTreeNodes();

    
// 進行你需要的訪問操作
    foreach (TreeNode node in nodes) {
        
foreach (Category category in categories) {
            
if (category.CategoryId == int.Parse(node.Value)) {
                node.Checked 
= true;                        
            }
        }
    }           
}
 
發佈了19 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章