TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类
生活随笔
收集整理的這篇文章主要介紹了
TreeViewVisitor: 一个快捷访问 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;????????????????????????
????????????}
????????}
????}???????????
}
當然,目前這個類的應用范圍很局限,僅僅限于 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;????????????????????????
????????????}
????????}
????}???????????
}
當然,目前這個類的應用范圍很局限,僅僅限于 TreeView 控件。但如果我們進一步思考,則可以很容易的推廣到對普通的樹狀結構,或者多級菜單的訪問邏輯中。從而實現與具體控件無關的訪問邏輯。
因為業余時間有限,先到此打住。
總結
以上是生活随笔為你收集整理的TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三款博客备份下载软件
- 下一篇: C语言知识分享:面向对象和面向过程到底是