2009-04-30 6 views
2

Hier ist, was ich versuche zu tun. Ich habe ein TreeView Server Side Control (asp.net 2.0) und ich brauche den Benutzer in der Lage sein, Knoten hinzufügen, dann, nachdem alle gewünschten Knoten hinzugefügt werden, sollten die Daten in der Datenbank gespeichert werden.TreeView Manipulation, speichern hinzufügen usw.

Hier sind einige Dinge Ich mag würde man beachten muss:

1) Ich möchte nicht der neue Knoten die Baumdaten jedes Mal speichern hinzugefügt wird, sondern die Daten in der Sitzung halten, bis der Benutzer beschließt, den gesamten Baum zu speichern. Die Frage hier ist: kann ich die Struktur an ArrayList-Objekt binden und dieses Objekt in Sitzung behalten (anstatt die gesamte Struktur in Sitzung zu halten)? Dann muss ich jedes Mal, wenn der Knoten hinzugefügt wird, den Baum an die ArrayList und nicht an die Datenbank binden.

2) Ich möchte ViewState minimieren, irgendwelche Tipps? Was funktioniert am besten: den Ansichtszustand komprimieren oder alles auf dem Server speichern?

Danke!

Antwort

0

Verwenden Sie TreeNodeCollection als Ihr internes Array in ViewState oder Session. Hier ist ein grobes Modell eines Ansatzes, den Sie verwenden können; alles andere als perfekt, aber sollte dich auf die richtige Spur bringen.

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, wenn Sie Array-Manipulation zuerst tun möchten, dann trennen Sie einfach von der DB speichern in einem separaten Button-Klick-Ereignis. – Ian