2009-04-30 2 views
2

これは私がやろうとしていることです。私はTreeViewのサーバー側のコントロール(asp.net 2.0)を持っていると私はそれにノードを追加することができるようにユーザーを必要とし、すべてのノードが追加された後、データはデータベースに保存する必要があります。TreeViewの操作、追加の保存など

ここで私はに注意を払うしたいと思いますいくつかのものがあります:

1)私は、ツリーのデータに新しいノードが追加されるたびに保存するのではなく、ユーザーまでのセッションでデータを保持していませんツリー全体を保存することを決定します。ここで問題となるのは、ツリーをArrayListオブジェクトにバインドし、そのオブジェクトをセッションに保持できるかどうか(セッション全体でツリーを保持するのではなく)ですか?その後、ノードが追加されるたびに、データベースではなくArrayListにツリーを再バインドする必要があります。

2)どのようなヒントでもViewStateを最小限に抑えたいですか?何が一番うまくいくのですか:常にビューステートを圧縮するか、すべてをサーバー上に保持しますか?

ありがとうございます!

答えて

0

ViewStateまたはSessionのいずれかを保持する内部配列としてTreeNodeCollectionを使用します。ここでは、あなたが使用できるアプローチの大まかなモックアップがあります。完璧とはかけ離れていますが、正しい軌道に乗るべきです。

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

Btwの場合は、最初に配列操作を行いたい場合は、別のボタンをクリックして別のボタンクリックイベントに保存してください。 – Ian

関連する問題