TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类
来源:互联网 发布:南风捏脸数据御姐 编辑:程序博客网 时间:2024/05/21 11:24
Web 开发中经常用到 TreeView 控件,一个很常见的操作就是遍历所有的节点。但是该控件本身并未提供此功能,每次都要手工写递归访问的函数,非常烦琐。所以我写了一个简单的帮助类来解决这个问题,这样就不需要每次用递归来访问了:
一个简单的使用范例:遍历所有节点,并将符合条件的节点选中。
当然,目前这个类的应用范围很局限,仅仅限于 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;
}
}
}
}
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;
}
}
}
}
// 创建访问器对象
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 控件节点的帮助类
- 一个快捷访问 TreeView 控件节点的帮助
- 树状图 TreeView控件--访问控件的所有节点
- Delphi下Treeview控件基于节点编号的访问
- Delphi下Treeview控件基于节点编号的访问
- 一个简单的帮助文档制作工具 Treeview控件
- WPF中展开一个TreeView控件的所有树节点
- WPF中展开一个TreeView控件的所有树节点
- WPF中展开一个TreeView控件的所有树节点
- WPF中展开一个TreeView控件的所有树节点
- WPF中展开一个TreeView控件的所有树节点
- javascript 访问treeview的节点
- C# TreeView的帮助类
- TreeView 控件客户端节点选择的代码
- TreeView控件节点遍历
- WPF中展开一个TreeView控件的所有树节点——出自《IT168》
- FireMonkey的TreeView控件的一个bug
- TreeView控件动态增加节点
- 电信的星空极速客户端软件强制安装策略升级了
- 明天去长春出差。。。
- IronPython 源码剖析系列(1):IronPython 编译器
- 产业链产生还需要很久
- Windows 系统右键菜单假死问题解决一例
- TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类
- CSS 控件适配器的菜单样式解释
- 对 CSS 控件适配器处理事件的 Bug 进一步修正
- CSS 控件适配器工具包对事件处理的 Bug 以及修正办法
- 第一个 IronPython 的 ASP.NET 程序
- Anthem.NET 的回调流程图
- 使用 Anthem.NET 的常见回调(Callback)处理方式小结
- Web Application Project for Visual Studio 2005 中如何同步页面和 designer.cs 代码
- ASP.NET 2.0 的 Event Validation