这是我想要做的。我有一个TreeView服务器端控件(asp.net 2.0),我需要用户能够向其添加节点,然后在添加所需的所有节点后,数据应保存到数据库中。
以下是我要注意的一些事项:
1)我不想在每次添加新节点时保存树数据,而是将数据保持在会话中,直到用户决定保存整个树。这里的问题是:我可以将树绑定到ArrayList对象并将该对象保持在会话中(而不是将整个树保持在会话中)吗?然后每次添加节点时,我都必须将树重新绑定到ArrayList而不是数据库。
2)我希望最小化ViewState,任何提示?最有效的方法是:压缩视图状态或始终将其全部保存在服务器上?
谢谢!
答案 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;
}
}