我正在寻找一种强大而简单的方法来避免TreeView中的重复值,现在我以这种方式执行插入操作:

while (rdr.Read())
{
     checkExists(rdr.GetString(3));
     rootNode.Items.Add(new TreeViewItem() { Header = rdr.GetString(3) });
}


其中RDR是包含所有要递归添加的值的播放器。现在,如果已经添加了这些值,我将获得重复的值,因此我创建了一个checkExists函数,您应该检查该值是否已在TreeView中。我还没有找到WPF的解决方案,但我仍在学习如何使用此控件,我知道该怎么做。

public void checkExists(string campionato)
{
      foreach (TreeView node in nation_team)
      {
           if (NodeExists(node, campionato))
           exists = true;
      }
}


此方法尚未准备好,只是一个beta。

private bool NodeExists(TreeNode node, string key) {
        foreach (TreeNode subNode in node.Nodes) {
            if (subNode.Text == key) {
                return true;
            }
            if (node.Nodes.Count > 0) {
                NodeExists(node, key);
            }
        }
        return false;
    }


我尝试过的可能解决方案,在foreach中,我试图遍历所有节点,但是编译器告诉我有关GetEnumerator的信息

最佳答案

如果我很了解您的问题,则您的NodeExists函数不起作用。您会看到,您对第二种情况没有做任何事情,这就是为什么给您一个错误。另外,您需要检查subNode的子级

适当的解决方案是这样的:

private bool NodeExists(TreeNode node, string key)
{
    foreach (TreeNode subNode in node.Nodes)
    {
        if ( subNode.Text.Equals(key) )
        {
            return true;
        }

        var nodeChildExists = NodeExists( subNode.Nodes, key );

        if(nodeChildExists)
        {
            return true;
        }
    }

    return false;
}

关于c# - 如何避免TreeView中的重复值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32274354/

10-16 10:27