ASP.NET Tree Control - Невозможно повторно развернуть дерево при перезагрузке - PullRequest
0 голосов
/ 13 октября 2009

У меня есть следующий код для удаления компании, отображаемой в моем дереве управления 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 голосов
/ 21 октября 2009

Попробуйте следующее:

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();
}
0 голосов
/ 20 октября 2009

Попробуйте: DataBind () запускает правильную глубину расширения.

        companyTree.ExpandDepth = expandDepth;
        companyTree.ShowLines = true;
        companyTree.DataBind();
0 голосов
/ 20 октября 2009

Получите expandDepth удаляемого узла.

Установить companyTree.ExpandDepth = глубину раскрытия удаленного узла.

Я думаю, это решит вашу проблему.

0 голосов
/ 16 октября 2009

Если я правильно понимаю, companyTree - это ваше корневое дерево, а parentNode - это узел в этом дереве. Кажется, вы очищаете все узлы в companyTree и перестраиваете его, поэтому теперь parentNode не указывает ни на один узел в новом дереве (это ссылка на висячую ветвь, если вы будут :)). Вы расширяете материал, используя parentNode , но это не имеет значения, поскольку оно не имеет никакого отношения к вашему древовидному элементу управления после его очистки.

Что вам, вероятно, следует сделать, это запомнить идентификатор компании, которую вы хотите выбрать, и полностью развернуть ее, вместо сохранения ссылки на конкретный узел.

...