TreeView中消失的节点

时间:2013-08-23 16:08:23

标签: c# winforms treeview nodes

在尝试添加键入我的文本框(ScanIdBox)并单击AddButton的数据后,我的rootNode似乎消失了,然后TreeView就是空白。我不确定我在这里做错了什么,因为我是Windows Forms和TreeViews的新手。我想要做的是在项目长度为8时添加parentNode,如果项目长度为9则添加childNode。我不希望根节点消失,但希望所有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中的节点。评论说它出来并且它四处游荡。仍然无法弄清楚我添加项目的错误。他们仍然没有加入。

EDIT2:此代码现在允许我向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 个答案:

答案 0 :(得分:0)

我认为您需要将代码更改为:

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添加到Parent,并且您不想清除节点。

答案 1 :(得分:0)

我最终废弃了TreeView。它可能很有用,但我只是将内容添加到列表中。这些项目是按顺序添加的,所以这不是什么大问题。不是一个好的解决方案,但它起作用,客户很高兴。