TreeView操作,保存添加等

时间:2009-04-30 17:23:39

标签: asp.net treeview viewstate

这是我想要做的。我有一个TreeView服务器端控件(asp.net 2.0),我需要用户能够向其添加节点,然后在添加所需的所有节点后,数据应保存到数据库中。

以下是我要注意的一些事项:

1)我不想在每次添加新节点时保存树数据,而是将数据保持在会话中,直到用户决定保存整个树。这里的问题是:我可以将树绑定到ArrayList对象并将该对象保持在会话中(而不是将整个树保持在会话中)吗?然后每次添加节点时,我都必须将树重新绑定到ArrayList而不是数据库。

2)我希望最小化ViewState,任何提示?最有效的方法是:压缩视图状态或始终将其全部保存在服务器上?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用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;
        }
    }