Манипулирование TreeView, сохранение добавления и т. Д. - PullRequest
2 голосов
/ 30 апреля 2009

Вот что я пытаюсь сделать. У меня есть серверный элемент управления TreeView (asp.net 2.0), и мне нужно, чтобы пользователь мог добавлять к нему узлы, а затем после добавления всех нужных узлов данные должны быть сохранены в базе данных.

Вот несколько вещей, на которые я хотел бы обратить внимание:

1) Я не хочу сохранять данные дерева каждый раз, когда добавляется новый узел, а просто хранить данные в сеансе, пока пользователь не решит сохранить все дерево. Вопрос здесь заключается в следующем: можно ли связать дерево с объектом ArrayList и сохранить этот объект в сеансе (вместо того, чтобы держать все дерево в сеансе)? Затем каждый раз, когда добавляется узел, мне придется привязывать дерево к списку ArrayList, а не к базе данных.

2) Я хочу свести к минимуму ViewState, какие-либо советы? Что лучше всего работает: сжатие состояния представления или постоянное хранение всего этого на сервере?

Спасибо!

1 Ответ

0 голосов
/ 21 февраля 2011

Используйте TreeNodeCollection в качестве внутреннего массива для хранения в ViewState или Session. Вот грубый макет подхода, который вы можете использовать; далеки от совершенства, но должны поставить вас на правильный путь.

TreeView tv = new TreeView();
    // Button click event for 'Add Node' button
    protected void AddNode(object sender, EventArgs e)
    {
        if (SaveNodeToDb(txtNewNode.Text, txtNavUrl.Text))
        {
            // Store user input details for new node in Session
            Nodes.Add(new TreeNode() { Text = txtNewNode.Text, NavigateUrl = txtNavUrl.Text });
            // Clear and re-add
            tv.Nodes.Clear();
            foreach (TreeNode n in Nodes)
                tv.Nodes.Add(n);
        }

    }

    public bool SaveNodeToDb(string name, string url)
    {
        // DB save action here.
    }

    public TreeNodeCollection Nodes
    {
        get
        {
            if (Session["UserNodes"] ! = null)
                return (TreeNodeCollection) Session["UserNodes"];
            else
                return new TreeNodeCollection();
        }
        set
        {
            Session["UserNodes"] = value;
        }
    }
...