TreeView - узел не расширяется

У меня есть TreeView с несколькими узлами, и если специальный узел (вы увидите в коде) удаляется, родительский узел должен быть расширен после обновления TreeView.

Вот как я это попробовал:

public void Remove(){
    ...
    ...
    else if ((NodeType)n.Tag == NodeType.Attribute) //Here I simply check if it's the "special" parent
    {
       Commands.CommandAttributeRemove cmd = (Commands.CommandAttributeRemove)mAppData.CommandFactory.Create("AttributeRemove");
       cmd.Data = n.Text;
       cmd.ObjectClass = mObjectClass;
       cmd.ObjectTypeName = n.Parent.Parent.Text;
       list.Add(cmd);
       mNodeToExpand = mTreeView.SelectedNode.Parent; //THIS LINE IS IMPORTANT... mNodeToExpand is a member variable which I use in UpdateData()
    }
    ...
    ...
    UpdateData();
}

public void UpdateData()
    {
       … //A lot of not so important stuff happening here (at least not important for what I want, I think)
       ...
        //Update Selected Items (for the case that objects were deleted) and UpdateSelection
        OnSelect();

        //UpdateSelection();
        this.Update();

Теперь это интересные вещи:

   if (mNodeToExpand != null)
        {
            mNodeToExpand.Expand();
            mNodeToExpand = null;
        }
}

Вот как я пытался добиться того, чего хочу, но узел не расширяется (у него все еще есть другие дочерние элементы).

в Remove() Я тоже пробовал mTreeView.SelectedNode.Parent.Nodes.Add(new Node("Blabla")); но он даже не добавляет узел.

И в if(mNodeToExpand!=null) Я также пытаюсь установить selectedNode в mNodeToExpand, но это дает мне NullReferenceException ДАЖЕ, ЧЕМ Я ПРОВЕРЯЮ, ЕСЛИ ЭТО НУЖНО В IF. ЗАЧЕМ?

1 ответ

Это не может быть ужасно, не так ли. FullPath - это, по-видимому, путь к узлу в древовидной структуре, поэтому, например, если у вас есть Node2, который является подузлом Node1, то FullPath для Node1 - это "Node1", а для Node2 - "Node1//Node2" … Теперь вещь в том, что по какой-то странной причине мой mNodeToExpand теряет информацию о FullPath, и внезапно это только "Node2" вместо "Node1//Node2"... Из-за этого он не раскрывается, потому что TreeView не находит узел с этим FullPath… Теперь я сохранил FullPath в строке, и когда я хочу его расширить, я ищу узел с этим FullPath, а затем раскрываю то, что возвращается. Это так глупо, потому что представьте себе список из 1 000 000 узлов. Это может занять очень много времени. Мне действительно не нравится эта библиотека Crownwoods.DotNetMagic, но это уже существующий код, над которым я работаю.

Другие вопросы по тегам