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中检查它是否为空。为什么?

这不奇怪。FullPath显然是树视图中节点的路径,所以例如,如果你有Node2,它是Node1的子节点,那么Node1的FullPath是"Node1",而Node2的FullPath则是"Node1/Node2"。。。因此,它没有展开,因为TreeView找不到具有此FullPath的节点……现在我所做的是将FullPath存储在一个字符串中,当我想展开它时,我搜索具有此FullPath的节点,然后展开返回的内容。这太愚蠢了,因为想象一下1000个节点的列表。这可能需要很长时间。我开始真的不喜欢这个Crownwoods.DotNetMagic库,但它已经是我正在处理的现有代码了。

最新更新