1

在尝试添加输入到我的文本框 (ScanIdBox) 并单击 AddButton 的数据后,我的 rootNode 似乎消失了,然后 TreeView 为空白。我不确定我在这里做错了什么,因为我是 Windows 窗体和 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;
    }
4

2 回答 2

0

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

于 2014-06-18T21:35:03.320 回答
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 添加到父节点,并且您不想清除节点。

于 2013-08-23T17:50:16.300 回答