2009-04-30 23 views
2

這是我正在做的。我有一個TreeView服務器端控件(asp.net 2.0),我需要用戶能夠添加節點,然後添加所需的所有節點後,數據應該保存到數據庫。TreeView操作,保存添加等

這裏有一些事情,我想關注:

1)我不想每次添加新節點時保存樹數據,而是保持數據會話,直到用戶決定保存整個樹。這裏的問題是:我可以將樹綁定到ArrayList對象並將該對象保留在會話中(而不是將整個樹保留在會話中)?然後每次添加節點時,都必須將樹重新綁定到ArrayList而不是數據庫。

2)我希望儘量減少ViewState的任何提示?什麼效果最好:壓縮viewstate或始終將其全部保存在服務器上?

謝謝!

回答

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; 
     } 
    } 
+0

順便說一句,如果你想先做數組操作,那麼就把這個數據庫分開保存成一個單獨的按鈕點擊事件。 – Ian 2011-02-21 09:28:08