如何获取树视图中的所有展开节点?

2024-01-07

我有一个包含 TreeView 的程序。除了根节点和根节点下的两个节点之外,我的所有节点都是从数据库加载的。

当用户将数据添加到数据库时,它必须自动添加到 TreeView。我可以通过清除所有节点、添加默认节点并将所有数据(包括新节点)添加到我的 TreeView 中来成功完成此操作,但新 TreeView 的所有节点都被折叠。

我们的客户希望保留所有扩展的节点,但仍添加他刚刚添加的新数据。有没有办法知道所有展开的节点并在折叠或刷新后再次展开?感谢您的任何回复。


您好,据我了解,您想在刷新树视图(通过添加新数据甚至删除一些数据)后保存树视图地图,您想要展开所有展开的节点,其他节点默认折叠。 解决方案是:

1)刷新前保存展开的树视图节点

2)刷新树视图数据(请注意,如果要删除节点,请将其从保存的列表中删除)

3)设置之前保存的树状视图地图

保存树视图图(仅展开节点)-> 此代码查看树视图节点集合并将扩展节点名称保存在字符串列表中

List<string> collectExpandedNodes(TreeNodeCollection Nodes)
        {
            List<string> _lst = new List<string>();
            foreach (TreeNode checknode in Nodes)
            {
                if (checknode.IsExpanded)
                    _lst.Add(checknode.Name);
                if (checknode.Nodes.Count > 0)
                    _lst.AddRange(collectExpandedNodes(checknode.Nodes));
            }
            return _lst;
        }

现在您已在列表中收集了展开的节点名称,并且想要恢复树视图外观,您需要两个函数,一个是按名称检索节点的函数,另一个是展开所选节点及其父节点的函数,以下代码执行以下操作:

如果节点存在于树节点集合中,则此函数检索指向所选节点名称的指针

TreeNode FindNodeByName(TreeNodeCollection NodesCollection , string Name)
        {
          TreeNode returnNode = null; // Default value to return
          foreach (TreeNode checkNode in NodesCollection)
            {
                if (checkNode.Name == Name)  //checks if this node name is correct
                    returnNode = checkNode;
                else if (checkNode.Nodes.Count > 0 ) //node has child
                {
                    returnNode = FindNodeByName(checkNode.Nodes , Name);
                }

              if (returnNode != null) //check if founded do not continue and break
              {
                  return returnNode;
              }

            }
            //not found
            return returnNode;
        }

和此函数展开节点及其父节点

void expandNodePath(TreeNode node)
        {
            if (node == null)
                return;
            if (node.Level != 0) //check if it is not root
            {
                node.Expand();
                expandNodePath(node.Parent);
            }
            else
            {
                node.Expand(); // this is root 
            }

        }

下面给大家展示一下函数的使用

private void button4_Click(object sender, EventArgs e)
        {
            //saving expanded nodes
            List<string> ExpandedNodes = new List<string>();
            ExpandedNodes = collectExpandedNodes(treeView1.Nodes);
            //resetting tree view nodes status to colapsed
            treeView1.CollapseAll();

            //Restore it back
            if (ExpandedNodes.Count > 0)
            {
                TreeNode IamExpandedNode;
                for (int i = 0; i < ExpandedNodes.Count;i++ )
                {
                    IamExpandedNode = FindNodeByName(treeView1.Nodes, ExpandedNodes[i]);
                    expandNodePath(IamExpandedNode);
                }

            }

        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取树视图中的所有展开节点? 的相关文章

随机推荐

  • 从 Jenkins Multijob 迁移到 Pipeline 插件

    目前我们正在使用 Jenkins CI 1 643 我相信 以及 Multijob 插件和 Job DSL 使用 Job DSL 生成作业集合 以及包含特定顺序的所有其他作业 构建 分析 单元测试 集成测试等 的多作业 我有兴趣升级到 Je
  • maven插件安装:安装文件错误

    我使用 install install file 将 jar 安装到我的本地存储库 我的 pom xml 编写如下
  • 将无序列表制作为下拉菜单

    如果我在 WordPress 上显示此代码 将其转换为跳转菜单的最简单方法是什么 ul class toc odd level 1 li a href 1 It s finally here a li li a href 2 Improve
  • Python 中的线程需要更长的时间而不是使其更快?

    我编写了 3 个不同的代码来比较有线程和没有线程 基本上测量通过使用线程节省了多少时间 结果没有任何意义 这是我的代码 import time def Function global x x 0 while x lt 300000000 x
  • 在多宿主 Windows 10 计算机上接收 UDP 多播消息

    我有一个C NET侦听 UDP 多播消息的客户端 我需要在单个网络接口上接收消息 有时我看不到收到的消息 当我禁用其他接口时 它可以工作 我尝试使用本网站上类似问题的代码将套接字选项设置为特定接口 但是 我不确定这是否只影响发送多播消息而不
  • 在 PHP 中学习 mvc 的最佳方法是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 mvc 完全陌生 如何学习 走这条路 了解 MVC Google 一下 参见维基百科文章 选择一个框架 我建议 CodeIgni
  • 提高 Fortran 代码性能的提示和技巧 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在新的 iTunes connect 中创建应用内购买测试用户?

    我在 itune connect 中创建了一个测试用户 用户创建成功 并且还可以登录手机苹果商店 但是 当我要在同一用户的应用程序购买中进行测试时 我无法进行测试 总是显示错误 无法找到您输入的 Apple ID 或您的密码不正确 请重试
  • 适用于 Chrome,但不适用于 Firefox - jquery

    carat weight right li css left function index value if value 100 this children span css margin left 58px text align righ
  • 继续出现此编译错误[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 当我编译时 我不断收到此错误 mario c 4 1 error expected identifier or 我尝试过改变一些东
  • .htaccess - 将域/lang/重定向到每种语言的子域

    我已经为此苦苦挣扎了好几个星期 但无法找到解决方案 我必须在多语言网站的 htaccess 中进行重定向 其所有页面都遵循相同的结构 但每种语言都有一个子域 以下方式对 http 和 https 有效 domain es es allpag
  • gcc -D_FORTIFY_SOURCE=1 和 -D_FORTIFY_SOURCE=2 之间的区别

    有人可以指出两者之间的区别吗gcc D FORTIFY SOURCE 1 and D FORTIFY SOURCE 2 我猜 2更安全吗 我无法找到逐点列出差异的列表 我也读过 D FORTIFY SOURCE 2应该与使用 O2 否则并非
  • 如何从 Scala 方法创建 UDF(计算 md5)?

    我想从两个已经工作的函数构建一个 UDF 我正在尝试计算 md5 哈希作为现有 Spark Dataframe 的新列 def md5 s String String toHex MessageDigest getInstance MD5
  • JavaScript 字符串按正则表达式结果分割子字符串包含空切片

    我有以下字符串分割 JavaScript 代码 var formula field1 field2 field5 field2 field3 console log formula split 而结果却出乎意料 field1 field2
  • QFileSystemModel rowCount 未按预期工作

    我正在尝试模型 视图编程中的一个示例 http doc qt io qt 5 model view programming html http doc qt io qt 5 model view programming html 为了演示如
  • 如何确定docker容器端口号?

    ASP NET 应用程序部署到 Docker 容器 即 可以通过以下方式访问 http 10 98 1 191 1673 webapp start http 10 98 1 191 1673 webapp start 从后端来看 我需要确定
  • 如何使用多个输入的任何循环指定输入目录?

    public class MultiXslt public static void main String args throws TransformerException ParserConfigurationException SAXE
  • 手机上的 Silverlight 网站

    我正在开发一个 Silverlight 网站 功能要求之一是旋转图像在所有浏览器上显示 该测试站点在所有桌面计算机浏览器中看起来都很棒 现在的问题是手机上的系统无法加载 我无法理解 iPhone 黑莓等设备上没有插件 但我的问题是在 Mic
  • PyScripter Rpyc

    也许有人可以给我一些如何将 Rpyc 安装到 PyScripter 的指南 我使用 PyScripter 1 9 9 7 和 Python 2 6 我尝试用谷歌搜索并找到一些说明 但仍然没有成功 Thanks 抓取文件rpyc 2 60 p
  • 如何获取树视图中的所有展开节点?

    我有一个包含 TreeView 的程序 除了根节点和根节点下的两个节点之外 我的所有节点都是从数据库加载的 当用户将数据添加到数据库时 它必须自动添加到 TreeView 我可以通过清除所有节点 添加默认节点并将所有数据 包括新节点 添加到