如何通过获取nodes.text并设置为true或false来填充Treeview node.checked为true或false

Posted

技术标签:

【中文标题】如何通过获取nodes.text并设置为true或false来填充Treeview node.checked为true或false【英文标题】:How to Populate Treeview node.checked to true or false by getting nodes.text and set to true or false 【发布时间】:2020-02-05 11:19:48 【问题描述】:

我有一个名为 treeview1 的树视图,在 form1 中有几个子节点,每个节点都有一个复选框。我得到了选中的节点,并在数据库中将选中的值保存为 true,在表中将未选中的值保存为 false。我需要将选中的值修改为 true 或 false,方法是将它们填充到 form2 中名为 treeview2 的另一个树视图中

我的树视图看起来有点像这样

形成这个我必须在另一个 TreeView2 中修改那些检查值,它在 form2 中。在这里我需要获取节点名称并从数据库中设置 True 或 False 并填充 Treeview2 节点检查。

注意:我已将选中的节点保存在数据库中,选中为 True,未选中为 False。从这里我必须通过填充 Form2 中的 treeView2 来再次修改它。我只需要检查 Node.Text 并从 db 设置检查的方法。

这是收集列表中所有节点名称的代码

 private IEnumerable<TreeNode> ModifyGetUNNodes(string NodeName, bool nodeVale)
    
        var checkUnNodes = new List<TreeNode>();
        GetUnNodes(checkUnNodes, ModifyTreeView.Nodes, NodeName, nodeVale);
        return checkUnNodes;
    

    // Return a list of the TreeNodes that are checked.
    private static void GetNodes(ICollection<TreeNode> checkedNodes, IEnumerable nodes)
    
        foreach (TreeNode node in nodes)
        
            checkedNodes.Add(node);

            // Check the node's descendants.
            GetNodes(checkedNodes, node.Nodes);
        
    

从上面的代码我得到了节点的所有名称。在这里我需要检查名称并将检查数据设置为真或假

        var allNodes = ModifyGetNodes();
        var allNodeList = allNodes.Select(node => node.Text).ToList();

形成这个校验节点文本

 if(node.Text == "Bread")
     node.checked = y.Bread

这里 y.Bread 的值为 true。

if(node.Text =="Chips")
      node.checked =y.Chips

这里将 y.Chips 作为值 false。

像这样的一些东西我必须检查名称并在 form2 的 treeview2 中设置检查值

当我加载 Form2 时,我必须通过获取数据表单数据库来检查节点

注意:我将 Node Bread Checked as true 保存在 Column Bread as(true) 和 Wine 中,它是 Unchecked,因此它将保存在 Wine Column as(False) 中。

【问题讨论】:

感谢您抽出宝贵时间分享您的问题。你要求什么不清楚。你的目标和困难是什么?到目前为止你做了什么?请尝试更好地解释您的问题、您的开发环境和数据结构,并分享更多代码(无屏幕截图)、屏幕图像或草图以及用户故事或场景图。为了帮助您改进您的请求,请考虑阅读 How do I ask a good question 你能解释一下我需要通过在另一个树视图中填充检查值来将它们修改为真或假吗? @OlivierRogier 我有 2 个具有相同树视图的表单,我在表格中将 form1 树视图检查节点保存为 true 并将未选中节点保存为 false。我必须在表格 2 中填充 treeview2 中的选中节点才能进行修改,这意味着我可以再次检查更多节点或取消选中并将其再次保存在数据表中。 我不明白你的问题:如果你知道如何从form1保存,你就知道如何从form2保存,不是吗?我看你有答案。如果不适合,请提供您的实际代码和屏幕截图吗? @OlivierRogier 我将那些选中的值表单 form1 treeview1 保存在 DB 中,但事情是我已经在 form2 treeview2 中填充,好像 treeview1 被选中并且未选中,它以对应的名称保存到 db 作为真假。当打开 form2 我必须从数据库中获取数据。 【参考方案1】:

这是我得到答案的代码


    private IEnumerable<TreeNode> ModifyGetUNNodes(string NodeName, bool nodeVale)
        
            var checkUnNodes = new List<TreeNode>();
            GetUnNodes(checkUnNodes, ModifyTreeView.Nodes, NodeName, nodeVale);
            return checkUnNodes;
        

        // Return a list of the TreeNodes that are checked.
        private static void GetNodes(ICollection<TreeNode> checkedNodes, IEnumerable nodes, string nodeName, bool checkValue)
        
            foreach (TreeNode node in nodes)
            
                if(node.Text == nodeName)
                   node.Checked = checkValue;

                // Check the node's descendants.
                GetNodes(checkedNodes, node.Nodes);
            
        

在这段代码中,我只是传递了另外两个参数并检查了 Node.text 并将其设置为选中和未选中的数据列值。

现在我通过传递 args 节点名称和检查值来调用函数

例子:

    var getData = DbContext.tblMenu.Select(x => x).ToList();
   foreach(var y in getData)
    
     ModifyGetUNNodes("Bread", y.Bread.value);
    

这里的 y.Bread 是包含检查值(真或假)的列名。

【讨论】:

以上是关于如何通过获取nodes.text并设置为true或false来填充Treeview node.checked为true或false的主要内容,如果未能解决你的问题,请参考以下文章

如何比较 2 个列表并在 Python 中获取 True 或 False 列表? [复制]

bootstrap treeview添加大量子节点

如何决定是不是将 ProcessStartInfo.UseShellExecute 属性设置为 true 或 false?

Java面试题:如何通过反射获取和设置对象私有字段的值?

如何在 jquery 中将 div 元素的可见属性设置为 true 或 false?

Vue computed 实现原理