当前位置: 首页 > 知识库问答 >
问题:

TreeView中消失的节点

楚浩然
2023-03-14

在尝试添加输入到我的文本框(ScanIdBox)中的数据并单击Add Button后,我的rootNode似乎消失了,然后TreeView是空白的。我不确定我在这里做错了什么,因为我是Windows窗体和TreeView的新手。我想做的是,如果项目的长度为8,添加一个父节点,如果项目的长度为9,添加一个子节点。我不希望根节点消失,但希望所有8个字符长的项目都是根节点下的父节点,并希望所有其他项目都是最近添加的父节点的子节点。我怎样才能做到这一点?

public class Nodes
    {
        public TreeNode rootNode = new TreeNode();
        public TreeNode parentNode = new TreeNode();
        public TreeNode childNode = new TreeNode();
    }

    public void Scan_Form_Load(object sender, EventArgs e)
    {
        _boxNumberRepository = new BoxNumberRepository();

        Nodes _rootNode = new Nodes();
        _rootNode.rootNode.Text = "Scan ID";
        BoxAndFileList.Nodes.Add(_rootNode.rootNode);

        Text = "Scan Form";
        AcceptButton = AddButton;
        ScanIdLabel.Text = "Enter Scan ID #";
        AddButton.Text = "Add";
        RemoveButton.Text = "Remove";
    }

    public void PopulateTreeView()
    {
        Nodes _rootNode = new Nodes();
        BoxAndFileList.Nodes.Clear();
        ScanIdBox.Text = string.Empty;
        var items = new List<string>(_boxNumberRepository.GetAllItems());
        foreach (var boxNumber in items)
            if (boxNumber.Length == 8)
            {
                _rootNode.rootNode.Nodes.Add(boxNumber);
            }
            else
            {
                _rootNode.parentNode.Nodes.Add(boxNumber);
            }
    }

    public void AddButton_Click(object sender, EventArgs e)
    {
        var boxNumber = ScanIdBox.Text.Trim();

        if (!String.IsNullOrEmpty(boxNumber))
        {
            _boxNumberRepository.AddItem(boxNumber);
            PopulateTreeView();
        }
    }

编辑:找出节点消失的原因。我正在清除PopulateTreeView中的节点。我把它评论掉了,它就到处都是。仍然无法找出我在添加项目时做错了什么。他们仍然没有加入。

编辑2:这段代码现在允许我向TreeView添加项目,但它仍然会删除rootNode。我不完全确定我真的需要那个rootNode,现在我想到它,所以我真的不担心它。

public void PopulateTreeView()
    {
        BoxAndFileList.Nodes.Clear();
        var items = new List<string>(_boxNumberRepository.GetAllItems());
        foreach (var boxNumber in items)
            BoxAndFileList.Nodes.Add(boxNumber);
        ScanIdBox.Text = string.Empty;
    }

共有2个答案

满子实
2023-03-14

我最终放弃了TreeView。这可能很有效,但我只是简单地将一些东西添加到列表中。这些项目是按顺序添加的,所以没什么大不了的。这不是一个好的解决方案,但它奏效了,客户很高兴。

杨利
2023-03-14

我相信您需要将代码更改为:

public void PopulateTreeView()
{
     var items = new List<string>(_boxNumberRepository.GetAllItems());
    foreach (var boxNumber in items)
        BoxAndFileList.SelectedNode.Nodes.Add(boxNumber);
    ScanIdBox.Text = string.Empty;
}

注意:通过使用SelectedNode添加到父节点,您不想清除这些节点。

 类似资料:
  • 问题内容: 我设置了一个tableView,以便在触摸一个单元格时,它的高度会扩展以显示更多信息。tableView有5个部分。 我有一个错误:当单元格扩展时,该单元格下面的所有headersCells都不可见。控制台输出以下内容:“ [31233:564745]没有正在重用的表单元格的索引路径” 在我的情节提要中,我有2个自定义单元:用于数据承载单元和标题。 如果我在开始/结束更新之间输入,尽管

  • 有没有办法为一个TreeView设置两个根节点? 我发现很多例子,如果简单的树视图,但没有有用的例子,我的情况下。

  • 我有一个Treeview控件结构,我在运行时生成,它通过单击专用按钮将文本从文本框中取出的子节点添加到父节点。 现在,随着更多的子节点添加到特定的父节点,我希望通过单击按钮来搜索该父节点中先前添加的子节点的名称(文本),以防止用户添加具有相同名称的重复节点。 如果发生这种情况,用户应该会收到一条消息,表明具有相同名称的子节点已添加到该特定父节点。我已经为相邻的子节点编写了解决此问题的代码,即,如果

  • Treeview小部件显示实现gtk.TreeModel接口的模型的内容。 PyGTK提供以下类型的模型 - gtk.ListStore gtk.TreeStore gtk.TreeModelSort ListStore是一个列表模型。 与gtk.TreeView小部件关联时,它会生成一个包含要从中选择的项的列表框。 使用以下语法声明gtk.ListStore对象 - store = gtk.Li

  • 我有一个包含如下xml的字符串: 我需要在我的树视图中为每个缩进创建一个树节点,这样我可以在需要的时候扩展和收缩它,因为每个节点中都有这么多信息,我该怎么做? 结果应该是这样的: 非常感谢。

  • 假设我有一个绑定项目源(可观察集合)的TreeView,我有这样的东西:http://docs.telerik.com/devtools/wpf/controls/radtreeview/how-to/howto-tri-state-mvvm 每个项目包括父视图都有一个复选框和名称(字符串)。 我想让子节点仅在检查父节点时可用。 如果父节点未被选中,所有子节点也将被取消选中。 有没有办法让我做到这