ASP.NET树控件 - 无法在重新加载时重新展开树

时间:2009-10-12 21:47:58

标签: event-handling tree asp.net-2.0

我有以下代码来删除我的ASP.NET 2.0树控件中显示的公司:

protected void Delete_Click(object sender, EventArgs e)
{
    TreeNode parentNode = null;
    int expandDepth = 1;
    string companyID = "";

    expandDepth = companyTree.SelectedNode.Depth;
    if(companyTree.SelectedNode.Parent != null)
        parentNode = companyTree.SelectedNode.Parent;
    companyID = companyTree.SelectedNode.Value;

    // Delete the company...
    //// Companies.DeleteCompany(new Guid(companyID));

    // Repopulate the tree...
    DataTable dtTree = Companies.GetTree();
    companyTree.Nodes.Clear();
    companyTree.Nodes.Add(Tree.BuildTree(dtTree, Page));
    companyTree.ExpandDepth = expandDepth;
    companyTree.ShowLines = true;
    if (parentNode != null)
    {
        List<TreeNode> parentChain = new List<TreeNode>(expandDepth + 1);
        parentChain.Add(parentNode);
        while (parentNode.Parent != null)
        {
            parentChain.Add(parentNode.Parent);
            parentNode = parentNode.Parent;
        }

        for (int i = parentChain.Count - 1; i >= 0; i--)
        {
            parentChain[i].Expand();
        }
        parentChain[0].Select();
    }
}

由于某种原因,树显示为完全折叠(仅显示根节点),我所做的任何事情似乎都不会使其扩展回至少我删除的节点的父节点。有什么建议吗?

4 个答案:

答案 0 :(得分:0)

如果我理解正确, companyTree 是您的根树, parentNode 是该树上的节点。您似乎正在清除 companyTree 中的所有节点并重建它,所以现在 parentNode 不指向新树中的任何节点(它是对悬空分支的引用,如果你愿意:))。您正在使用 parentNode 扩展内容,但它不相关,因为它一旦清除它就与树控件无关。

您应该做的是记住您要选择的公司的ID并一直展开,而不是保存对特定节点的引用。

答案 1 :(得分:0)

试试这个:DataBind()使扩展深度成为可能。

        companyTree.ExpandDepth = expandDepth;
        companyTree.ShowLines = true;
        companyTree.DataBind();

答案 2 :(得分:0)

获取节点的expandDepth被删除。

设置companyTree.ExpandDepth =已删除节点的expandDepth。

我认为它会解决你的问题。

答案 3 :(得分:0)

尝试以下方法:

protected void Delete_Click(object sender, EventArgs e)
{
    TreeNode parentNode = null;
    int expandDepth = 1;
    string companyID = "";

    expandDepth = companyTree.SelectedNode.Depth;
    if(companyTree.SelectedNode.Parent != null)
        parentNode = companyTree.SelectedNode.Parent;
    companyID = companyTree.SelectedNode.Value;

    // Delete the company...
    //// Companies.DeleteCompany(new Guid(companyID));

    // Repopulate the tree...
    DataTable dtTree = Companies.GetTree();
    companyTree.Nodes.Clear();
    companyTree.Nodes.Add(Tree.BuildTree(dtTree, Page));
    companyTree.ExpandDepth = expandDepth;
    companyTree.ShowLines = true;
    while(parentNode.Parent!= null)
    {
     parentNode.Expand();
     parentNode= parentNode.Parent;
    }
    parentNode.Expand();
}